File tree Expand file tree Collapse file tree 3 files changed +66
-0
lines changed
pullrequests/invert_binary_tree Expand file tree Collapse file tree 3 files changed +66
-0
lines changed Original file line number Diff line number Diff line change
1
+ //lint:file-ignore U1000 Ignore all unused code
2
+ package invertbinarytree
3
+
4
+ type TreeNode struct {
5
+ Val int
6
+ Left * TreeNode
7
+ Right * TreeNode
8
+ }
9
+
10
+ /*
11
+ 時間:3分30秒
12
+
13
+ 再帰的に左右のノードを入れ替えていけば良いというのにはすぐに気づき、すんなり実装することができた。
14
+ */
15
+ func invertTreeStep1 (root * TreeNode ) * TreeNode {
16
+ if root == nil {
17
+ return nil
18
+ }
19
+ invertTreeStep1 (root .Left )
20
+ invertTreeStep1 (root .Right )
21
+ root .Left , root .Right = root .Right , root .Left
22
+ return root
23
+ }
Original file line number Diff line number Diff line change
1
+ //lint:file-ignore U1000 Ignore all unused code
2
+ package invertbinarytree
3
+
4
+ /*
5
+ Step1は冗長だったのでリファクタした。
6
+ これぐらい短いと早期リターンしなくても良いかなと思い下記のようにしました。
7
+ またイテレーティブに解く方法も実装しました。
8
+ */
9
+ func invertTreeStep2 (root * TreeNode ) * TreeNode {
10
+ if root != nil {
11
+ root .Left , root .Right = invertTreeStep2 (root .Right ), invertTreeStep2 (root .Left )
12
+ }
13
+ return root
14
+ }
15
+
16
+ func invertTreeIterative (root * TreeNode ) * TreeNode {
17
+ if root == nil {
18
+ return nil
19
+ }
20
+ stack := []* TreeNode {root }
21
+ for len (stack ) > 0 {
22
+ node := stack [len (stack )- 1 ]
23
+ stack = stack [:len (stack )- 1 ]
24
+ node .Left , node .Right = node .Right , node .Left
25
+ if node .Left != nil {
26
+ stack = append (stack , node .Left )
27
+ }
28
+ if node .Right != nil {
29
+ stack = append (stack , node .Right )
30
+ }
31
+ }
32
+ return root
33
+ }
Original file line number Diff line number Diff line change
1
+ //lint:file-ignore U1000 Ignore all unused code
2
+ package invertbinarytree
3
+
4
+ func invertTreeRecursive (root * TreeNode ) * TreeNode {
5
+ if root == nil {
6
+ return nil
7
+ }
8
+ root .Left , root .Right = invertTreeRecursive (root .Right ), invertTreeRecursive (root .Left )
9
+ return root
10
+ }
You can’t perform that action at this time.
0 commit comments