diff --git a/Algorithms/102. Binary Tree Level Order Traversal/102. Binary Tree Level Order Traversal.go b/Algorithms/102. Binary Tree Level Order Traversal/102. Binary Tree Level Order Traversal.go new file mode 100644 index 00000000..e3ea8c87 --- /dev/null +++ b/Algorithms/102. Binary Tree Level Order Traversal/102. Binary Tree Level Order Traversal.go @@ -0,0 +1,41 @@ +package leetcode + +/** + * Definition for a binary tree node. + * type TreeNode struct { + * Val int + * Left *TreeNode + * Right *TreeNode + * } + */ +func levelOrder(root *TreeNode) [][]int { + if root == nil { + return [][]int{} + } + queue := []*TreeNode{} + queue = append(queue, root) + curNum, nextLevelNum, res, tmp := 1, 0, [][]int{}, []int{} + for len(queue) != 0 { + if curNum > 0 { + node := queue[0] + if node.Left != nil { + queue = append(queue, node.Left) + nextLevelNum++ + } + if node.Right != nil { + queue = append(queue, node.Right) + nextLevelNum++ + } + curNum-- + tmp = append(tmp, node.Val) + queue = queue[1:] + } + if curNum == 0 { + res = append(res, tmp) + curNum = nextLevelNum + nextLevelNum = 0 + tmp = []int{} + } + } + return res +} diff --git a/Algorithms/102. Binary Tree Level Order Traversal/102. Binary Tree Level Order Traversal_test.go b/Algorithms/102. Binary Tree Level Order Traversal/102. Binary Tree Level Order Traversal_test.go new file mode 100644 index 00000000..66679c91 --- /dev/null +++ b/Algorithms/102. Binary Tree Level Order Traversal/102. Binary Tree Level Order Traversal_test.go @@ -0,0 +1,54 @@ +package leetcode + +import ( + "fmt" + "testing" +) + +type question102 struct { + para102 + ans102 +} + +// para 是参数 +// one 代表第一个参数 +type para102 struct { + one []int +} + +// ans 是答案 +// one 代表第一个答案 +type ans102 struct { + one [][]int +} + +func Test_Problem102(t *testing.T) { + + qs := []question102{ + + question102{ + para102{[]int{}}, + ans102{[][]int{}}, + }, + + question102{ + para102{[]int{1}}, + ans102{[][]int{[]int{1}}}, + }, + + question102{ + para102{[]int{3, 9, 20, NULL, NULL, 15, 7}}, + ans102{[][]int{[]int{3}, []int{9, 20}, []int{15, 7}}}, + }, + } + + fmt.Printf("------------------------Leetcode Problem 102------------------------\n") + + for _, q := range qs { + _, p := q.ans102, q.para102 + fmt.Printf("【input】:%v ", p) + root := Ints2TreeNode(p.one) + fmt.Printf("【output】:%v \n", levelOrder(root)) + } + fmt.Printf("\n\n\n") +} diff --git a/Algorithms/102. Binary Tree Level Order Traversal/README.md b/Algorithms/102. Binary Tree Level Order Traversal/README.md new file mode 100644 index 00000000..b5c47db6 --- /dev/null +++ b/Algorithms/102. Binary Tree Level Order Traversal/README.md @@ -0,0 +1,35 @@ +# [102. Binary Tree Level Order Traversal](https://leetcode.com/problems/binary-tree-level-order-traversal/) + +## 题目 + + +Given a binary tree, return the level order traversal of its nodes' values. (ie, from left to right, level by level). + +For example: +Given binary tree [3,9,20,null,null,15,7], + +```c + 3 + / \ + 9 20 + / \ + 15 7 +``` + +return its level order traversal as: + +```c +[ + [3], + [9,20], + [15,7] +] +``` + + +## 题目大意 + +按层序从上到下遍历一颗树。用一个队列即可实现。 + + +