ホームページ > バックエンド開発 > Golang > Go でバイナリ ツリーを効率的に比較する方法: Go ツアー演習 #7 を解く?

Go でバイナリ ツリーを効率的に比較する方法: Go ツアー演習 #7 を解く?

Susan Sarandon
リリース: 2024-12-16 10:32:11
オリジナル
573 人が閲覧しました

How to Efficiently Compare Binary Trees in Go: Solving the Go Tour Exercise #7?

Go ツアー演習 #7: バイナリ ツリーの等価性

Go ツアー演習「バイナリ ツリー」では、2 つのバイナリ ツリーに次の要素が含まれているかどうかを判断することが求められます。同じ価値観。この演習では、ツリーを走査してその値をチャネルに送信する再帰的な Walk 関数の作成に焦点を当てます。

提供したコードでは、ツリーがいつ完全に走査されたかを判断する問題が発生します。チャネルを閉じることは直感的に見えるかもしれませんが、Walk 関数の再帰的な性質により、トラバースが途中で終了してしまいます。

この問題に対する 1 つの解決策は、クロージャを利用することです。 Walk 関数のクロージャベースのバージョンを利用すると、すべての値が送信されるまでチャネルを閉じるのを延期できます。以下の変更されたコードは、この手法を示しています。

func Walk(t *tree.Tree, ch chan int) {
    defer close(ch) // Automatically closes the channel when this function returns

    var walk func(t *tree.Tree)
    walk = func(t *tree.Tree) {
        if t == nil {
            return
        }
        walk(t.Left)
        ch <- t.Value
        walk(t.Right)
    }
    walk(t)
}
ログイン後にコピー

この変更により、Walk 関数はすべての値が送信されると自動的にチャネルを閉じ、トラバーサルの完了を通知します。これにより、Same 関数はチャネルから値を受け取り、それらが同一であることを確認することで、両方のツリーからの値を効果的に比較できます。

以上がGo でバイナリ ツリーを効率的に比較する方法: Go ツアー演習 #7 を解く?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート