diff --git a/codes/go/chapter_tree/binary_tree_bfs.go b/codes/go/chapter_tree/binary_tree_bfs.go new file mode 100644 index 000000000..d04102f99 --- /dev/null +++ b/codes/go/chapter_tree/binary_tree_bfs.go @@ -0,0 +1,35 @@ +// File: binary_tree_bfs.go +// Created Time: 2022-11-26 +// Author: Reanon (793584285@qq.com) + +package chapter_tree + +import ( + "container/list" + . "github.com/krahets/hello-algo/pkg" +) + +// levelOrder Breadth First Search +func levelOrder(root *TreeNode) []int { + // Let container.list as queue + queue := list.New() + // 初始化队列,加入根结点 + queue.PushBack(root) + // 初始化一个切片,用于保存遍历序列 + nums := make([]int, 0) + for queue.Len() > 0 { + // poll + node := queue.Remove(queue.Front()).(*TreeNode) + // 保存结点 + nums = append(nums, node.Val) + if node.Left != nil { + // 左子结点入队 + queue.PushBack(node.Left) + } + if node.Right != nil { + // 右子结点入队 + queue.PushBack(node.Right) + } + } + return nums +} diff --git a/codes/go/chapter_tree/binary_tree_bfs_test.go b/codes/go/chapter_tree/binary_tree_bfs_test.go new file mode 100644 index 000000000..48d3d383b --- /dev/null +++ b/codes/go/chapter_tree/binary_tree_bfs_test.go @@ -0,0 +1,22 @@ +// File: binary_tree_bfs_test.go +// Created Time: 2022-11-26 +// Author: Reanon (793584285@qq.com) + +package chapter_tree + +import ( + . "github.com/krahets/hello-algo/pkg" + "testing" +) + +func TestLevelOrder(t *testing.T) { + /* 初始化二叉树 */ + // 这里借助了一个从数组直接生成二叉树的函数 + root := ArrayToTree([]int{1, 2, 3, 4, 5, 6, 7}) + t.Log("初始化二叉树: ") + PrintTree(root) + + // 层序遍历 + nums := levelOrder(root) + t.Log("层序遍历的结点打印序列 = ", nums) +}