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

Go でバイナリ ツリーの等価性を正確に判断するにはどうすればよいでしょうか?

DDD
リリース: 2024-12-09 16:51:11
オリジナル
557 人が閲覧しました

How Can We Accurately Determine Binary Tree Equivalence in Go?

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

Go のバイナリ ツリー

Go ツアーのバイナリ ツリー演習の同じ関数は、2 つのバイナリ ツリーが 2 つのバイナリ ツリーであるかどうかを比較します。木は同じ値を持ちます。課題は、両方のツリーが同等であると宣言するために、いつ完全に走査されるかを判断することにあります。

解決策

元の実装では、チャネルを使用して値を比較しようとします。ただし、チャネルがいつ空になるかを判断するという問題に直面しています。

別のアプローチでは、高階関数とクロージャを使用して、ツリーの終わりの状態を適切に通知します。強化された Walk 関数は、クロージャを利用して Walk 関数を初期化します。クロージャにより、関数の戻り時にチャネルが確実に閉じられるようになり、再帰による早期のチャネル クロージャが防止されます。

修正された Walk 関数は次のとおりです:

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

この改訂されたアプローチにより、チャネルが確実に閉じられます。すべての値が送信された後でのみ、Same がツリーの等価性を正確に比較できるようになります。

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

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