mirror of
				https://github.com/krahets/hello-algo.git
				synced 2025-11-04 06:07:20 +08:00 
			
		
		
		
	feat(tree): add binary tree bfs in golang
This commit is contained in:
		
							
								
								
									
										35
									
								
								codes/go/chapter_tree/binary_tree_bfs.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										35
									
								
								codes/go/chapter_tree/binary_tree_bfs.go
									
									
									
									
									
										Normal file
									
								
							@ -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
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										22
									
								
								codes/go/chapter_tree/binary_tree_bfs_test.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										22
									
								
								codes/go/chapter_tree/binary_tree_bfs_test.go
									
									
									
									
									
										Normal file
									
								
							@ -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)
 | 
			
		||||
}
 | 
			
		||||
		Reference in New Issue
	
	Block a user