@@ -9,12 +9,12 @@ type TreeNode struct {
99}
1010
1111
12- func invertTree (root * TreeNode ) * TreeNode {
12+ func invertTree3 (root * TreeNode ) * TreeNode {
1313 if root == nil {// 递归结束条件
1414 return nil
1515 }
16- right := invertTree (root .Right )// 返回已经翻转的右节点
17- left := invertTree (root .Left ) // 返回已经翻转的左节点
16+ right := invertTree3 (root .Right )// 返回已经翻转的右节点
17+ left := invertTree3 (root .Left ) // 返回已经翻转的左节点
1818 // 当前需要一级需要做的是把 左节点指向已经翻转的右节点 右节点指向已经翻转的左节点
1919 root .Left = right
2020 root .Right = left
@@ -30,33 +30,33 @@ func invertTree1(root *TreeNode) *TreeNode {
3030 root .Left = root .Right
3131 root .Right = temp
3232
33- invertTree (root .Left ) // 翻转的左节点
34- invertTree (root .Right )// 返翻转的右节点
33+ invertTree1 (root .Left ) // 翻转的左节点
34+ invertTree1 (root .Right )// 返翻转的右节点
3535
3636 return root
3737}
3838
39- func invertTree2 ( root * TreeNode ) * TreeNode {
40- if root == nil {
41- return nil
42- }
43- l := make ([] * TreeNode , 0 )
44- l = append ( l , root )
45- for len (l )> 0 {
46- curr := l [ 0 ]
47- l = l [ 1 :]
48- left := curr . Left
49- right := curr .Right
50- curr . Right = left
51- curr . Left = right
52- if curr . Left != nil {
53- l = append ( l , curr . Left )
54- }
55- if curr . Right != nil {
56- l = append ( l , curr . Right )
57- }
58- }
59- return root
39+
40+ func invertTree ( root * TreeNode ) * TreeNode {
41+ if root == nil {
42+ return root
43+ }
44+ queue := [] * TreeNode { root }
45+ for len (queue )> 0 {
46+ size := len ( queue )
47+ for i := 0 ; i < size ; i ++ {
48+ node := queue [ i ]
49+ node . Left , node . Right = node .Right , node . Left
50+ if node . Left != nil {
51+ queue = append ( queue , node . Left )
52+ }
53+ if node . Right != nil {
54+ queue = append ( queue , node . Right )
55+ }
56+ }
57+ queue = queue [ size :]
58+ }
59+ return root
6060}
6161
6262
@@ -80,25 +80,25 @@ func main() {
8080 Val : 3 ,
8181 }
8282 b .Right = e
83- f := & TreeNode {
84- Val : 6 ,
85- }
86- c .Left = f
83+ // f := &TreeNode{
84+ // Val: 6,
85+ // }
86+ // c.Left = f
8787 g := & TreeNode {
8888 Val : 9 ,
8989 }
9090 c .Right = g
9191 // 9 7 64 3 2 1
92- invertTree2 (a )
93- printOrder (a )
92+ r := invertTree (a )
93+ printOrder (r )
9494}
9595
9696func printOrder (root * TreeNode ){
9797 if root == nil {
9898 return
9999 }
100- printOrder (root .Left )
101100 fmt .Println (root .Val )
101+ printOrder (root .Left )
102102 printOrder (root .Right )
103103 return
104104}
0 commit comments