golang 二分木の各層を横断する方法
二分木の幅優先探索(BFS)を実現するには、キューを使用して実装します。
まず、二分木の構造を定義します:
type TreeNode struct {
Val int
Left *TreeNode
Right *TreeNode
}
その場合、キューを使用して階層の探索をサポートできます。
func levelOrder(root *TreeNode) [][]int {
if root == nil {
return [][]int{}
}
result := [][]int{}
queue := []*TreeNode{root}
for len(queue) > 0 {
levelSize := len(queue)
level := []int{}
for i := 0; i < levelSize; i++ {
node := queue[0]
queue = queue[1:]
level = append(level, node.Val)
if node.Left != nil {
queue = append(queue, node.Left)
}
if node.Right != nil {
queue = append(queue, node.Right)
}
}
result = append(result, level)
}
return result
}
この関数はまずルートノードが空でないか調べ、もし空であれば、空の結果を直接返します。
次に、キューを作成し、根のノードをキューに追加します。
キューが空になるまでループを回し、その間キューのサイズを記録して階層のノード数を記録する必要があります。
キューから現在の階層のノードを取り出して、その値をその階層の結果配列に追加します。次に、そのノードの左と右の子ノードをキューに追加して、次の階層の探索に備えます。
最後に、その階層の結果の配列を最終結果の配列に加えます。
最後に結果の配列を返せば、二叉木の階層的なトラバースの結果となります。
なお、上記のコードは一例であり、実際の利用にあたっては実装方法が異なる可能性があります。