@@ -21,50 +21,42 @@ func levelOrder(root *TreeNode) [][]int {
2121 if root == nil {
2222 return [][]int {}
2323 }
24- queue := []* TreeNode {}
25- queue = append (queue , root )
26- curNum , nextLevelNum , res , tmp := 1 , 0 , [][]int {}, []int {}
27- for len (queue ) != 0 {
28- if curNum > 0 {
29- node := queue [0 ]
30- if node .Left != nil {
31- queue = append (queue , node .Left )
32- nextLevelNum ++
24+ queue := []* TreeNode {root }
25+ res := make ([][]int , 0 )
26+ for len (queue ) > 0 {
27+ l := len (queue )
28+ tmp := make ([]int , 0 , l )
29+ for i := 0 ; i < l ; i ++ {
30+ if queue [i ].Left != nil {
31+ queue = append (queue , queue [i ].Left )
3332 }
34- if node .Right != nil {
35- queue = append (queue , node .Right )
36- nextLevelNum ++
33+ if queue [i ].Right != nil {
34+ queue = append (queue , queue [i ].Right )
3735 }
38- curNum --
39- tmp = append (tmp , node .Val )
40- queue = queue [1 :]
41- }
42- if curNum == 0 {
43- res = append (res , tmp )
44- curNum = nextLevelNum
45- nextLevelNum = 0
46- tmp = []int {}
36+ tmp = append (tmp , queue [i ].Val )
4737 }
38+ queue = queue [l :]
39+ res = append (res , tmp )
4840 }
4941 return res
5042}
5143
5244// 解法二 DFS
5345func levelOrder1 (root * TreeNode ) [][]int {
54- levels := [][]int {}
55- dfsLevel (root , - 1 , & levels )
56- return levels
57- }
58-
59- func dfsLevel (node * TreeNode , level int , res * [][]int ) {
60- if node == nil {
61- return
62- }
63- currLevel := level + 1
64- for len (* res ) <= currLevel {
65- * res = append (* res , []int {})
46+ var res [][]int
47+ var dfsLevel func (node * TreeNode , level int )
48+ dfsLevel = func (node * TreeNode , level int ) {
49+ if node == nil {
50+ return
51+ }
52+ if len (res ) == level {
53+ res = append (res , []int {node .Val })
54+ } else {
55+ res [level ] = append (res [level ], node .Val )
56+ }
57+ dfsLevel (node .Left , level + 1 )
58+ dfsLevel (node .Right , level + 1 )
6659 }
67- (* res )[currLevel ] = append ((* res )[currLevel ], node .Val )
68- dfsLevel (node .Left , currLevel , res )
69- dfsLevel (node .Right , currLevel , res )
60+ dfsLevel (root , 0 )
61+ return res
7062}
0 commit comments