mirror of
				https://github.com/krahets/hello-algo.git
				synced 2025-11-04 22:28:40 +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