ホームページ  >  記事  >  バックエンド開発  >  バイナリツリーを反転する golang プログラムを実装する方法

バイナリツリーを反転する golang プログラムを実装する方法

PHPz
PHPzオリジナル
2023-03-30 09:04:36557ブラウズ

バイナリ ツリーの反転 golang

バイナリ ツリーの反転はアルゴリズムに関する古典的な質問であり、インタビューでもよく聞かれます。この記事では、バイナリツリーを反転する golang プログラムを実装します。

バイナリ ツリーとは

バイナリ ツリーは、ルート ノードを含む限られたノードのセットで構成され、各ノードがそれぞれ左側と右側の子に接続されたツリー構造です。 .ノード。すべてのノードに左右の子ノードがない場合、そのツリー構造は二分木と呼ばれます。

golang では、バイナリ ツリー ノードを表すために構造体がよく使用されます。例:

type TreeNode struct {

Val int
Left *TreeNode
Right *TreeNode

}

上記のコードを使用してバイナリ ツリー ノードを定義します。Val はノードの値を表し、Left はノードの値を表します。 Right は左側の子ノードを表し、Right は右側の子ノードを表します。

バイナリ ツリーを反転する方法

バイナリ ツリーを反転する問題は単純に見えますが、実際にはいくつかの複雑な問題が含まれています。説明の便宜上、次のような二分木があると仮定します。

4
/ \
2 7

 / \
6   9

反転後の二分木は次のようになります。

 4

/ \
7 2
/ \
9 6

コードの実装に関しては、再帰的メソッドを使用してこの問題を解決できます。再帰的メソッドは、構造体のポインタを直接使用して、左右の子ノードの位置を交換できます。再帰メソッドのコードは次のとおりです。

func invertTree(root TreeNode) TreeNode {

if root == nil {
    return nil
}

root.Left, root.Right = invertTree(root.Right), invertTree(root.Left)
return root

}

invertTree という名前の関数を宣言します。 , この関数は、バイナリ ツリーのルート ノードへのポインタをパラメータとして受け取り、反転された新しいバイナリ ツリーへのポインタを返します。ルートノードが空の場合は nil が返されます。

関数本体内では、ルートノードの左側の子ノードと右側の子ノードを交換し、この処理を子ノードに再帰的に適用してバイナリツリーを反転する処理を再帰的に実行しています。 。

最後に、反転された新しいバイナリ ツリーのルート ノード ポインタを返します。

完全なコードは次のとおりです:

package main

import "fmt"

type TreeNode struct {

Val int
Left *TreeNode
Right *TreeNode

}

func invertTree(root TreeNode) TreeNode {

if root == nil {
    return nil
}

root.Left, root.Right = invertTree(root.Right), invertTree(root.Left)
return root

}

func main() {

root := &TreeNode{Val: 4, Left: &TreeNode{Val: 2},
    Right: &TreeNode{Val: 7, Left: &TreeNode{Val: 6}, 
           Right: &TreeNode{Val: 9}}}

fmt.Println("Before invert: ")
fmt.Println(root.Val, root.Left.Val, root.Right.Val, root.Right.Left.Val, root.Right.Right.Val)

invertTree(root)

fmt.Println("After invert: ")
fmt.Println(root.Val, root.Left.Val, root.Right.Val, root.Left.Left.Val, root.Left.Right.Val)

}

at この例では、最初にバイナリ ツリーのルート ノードを定義します。 main 関数では、invertTree 関数を呼び出してバイナリ ツリーを反転します。最後に、反転前後の二分木を出力します。

結論

この記事では、二分木を反転する方法についての golang プログラムを紹介しました。単純な再帰関数を使用することで、私たちのプログラムはこの問題をうまく解決できます。この記事がバイナリ ツリー反転の問題と golang 言語の使用を誰もが理解するのに役立つことを願っています。

以上がバイナリツリーを反転する golang プログラムを実装する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。