ホームページ > バックエンド開発 > Golang > Go でバイナリ ツリーの等価性を効率的にテストするにはどうすればよいでしょうか?

Go でバイナリ ツリーの等価性を効率的にテストするにはどうすればよいでしょうか?

DDD
リリース: 2024-12-17 22:16:12
オリジナル
298 人が閲覧しました

How Can We Efficiently Test for Binary Tree Equivalence in Go?

バイナリ ツリーの Go 等価性テスト

Go ツアーの演習 #7 で見られるように、バイナリ ツリーの等価性テストは、同じ値を含む 2 つのツリーの等価性。両方のツリーを同時に走査し、それらの値をチャネルに送信することでこれを達成しようとすることもできます。ただし、トラバーサルの終了と残りの要素がないことの通知を確実に行うことは、重大な障害であることがわかります。

提供されたコードは、ツリーからチャネルに値を送信し、それらの値を同時に消費することで、このタスクを処理しようとします。同じ関数内で。ただし、Walk 関数内で close(ch) を使用すると、チャネルが途中で終了し、すべての値が送信されなくなるため問題があります。

幸いなことに、クロージャを利用して問題を解決するエレガントなソリューションが golang-nuts グループから登場しました。この問題:

func Walk(t *tree.Tree, ch chan int) {
    defer close(ch) // Closes the channel upon function return
    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)
}
ログイン後にコピー

修正されたコードでは、クロージャを利用してツリー トラバーサルを実装しています。 defer ステートメントは、トラバースの完了時にチャネルが確実に閉じられるようにします。このメカニズムは、残りの要素がないことの通知を適切に処理し、正確な等価性チェックを保証します。

以上がGo でバイナリ ツリーの等価性を効率的にテストするにはどうすればよいでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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