File tree Expand file tree Collapse file tree 7 files changed +528
-1
lines changed
solution/1600-1699/1666.Change the Root of a Binary Tree Expand file tree Collapse file tree 7 files changed +528
-1
lines changed Original file line number Diff line number Diff line change 48
48
49
49
<!-- 这里可写通用的实现逻辑 -->
50
50
51
+ ** 方法一:自底向上模拟**
52
+
53
+ 从叶节点 ` leaf ` 开始,向上模拟翻转操作。
54
+
55
+ 时间复杂度 $O(n)$,空间复杂度 $O(1)$。其中 $n$ 为二叉树节点个数。
56
+
51
57
<!-- tabs:start -->
52
58
53
59
### ** Python3**
54
60
55
61
<!-- 这里可写当前语言的特殊实现逻辑 -->
56
62
57
63
``` python
64
+ """
65
+ # Definition for a Node.
66
+ class Node:
67
+ def __init__(self, val):
68
+ self.val = val
69
+ self.left = None
70
+ self.right = None
71
+ self.parent = None
72
+ """
73
+
58
74
75
+ class Solution :
76
+ def flipBinaryTree (self , root : " Node" , leaf : " Node" ) -> " Node" :
77
+ cur = leaf
78
+ p = cur.parent
79
+ while cur != root:
80
+ gp = p.parent
81
+ if cur.left:
82
+ cur.right = cur.left
83
+ cur.left = p
84
+ p.parent = cur
85
+ if p.left == cur:
86
+ p.left = None
87
+ elif p.right == cur:
88
+ p.right = None
89
+ cur = p
90
+ p = gp
91
+ leaf.parent = None
92
+ return leaf
59
93
```
60
94
61
95
### ** Java**
62
96
63
97
<!-- 这里可写当前语言的特殊实现逻辑 -->
64
98
65
99
``` java
100
+ /*
101
+ // Definition for a Node.
102
+ class Node {
103
+ public int val;
104
+ public Node left;
105
+ public Node right;
106
+ public Node parent;
107
+ };
108
+ */
109
+
110
+ class Solution {
111
+ public Node flipBinaryTree (Node root , Node leaf ) {
112
+ Node cur = leaf;
113
+ Node p = cur. parent;
114
+ while (cur != root) {
115
+ Node gp = p. parent;
116
+ if (cur. left != null ) {
117
+ cur. right = cur. left;
118
+ }
119
+ cur. left = p;
120
+ p. parent = cur;
121
+ if (p. left == cur) {
122
+ p. left = null ;
123
+ } else if (p. right == cur) {
124
+ p. right = null ;
125
+ }
126
+ cur = p;
127
+ p = gp;
128
+ }
129
+ leaf. parent = null ;
130
+ return leaf;
131
+ }
132
+ }
133
+ ```
134
+
135
+ ### ** C++**
136
+
137
+ ``` cpp
138
+ /*
139
+ // Definition for a Node->
140
+ class Node {
141
+ public:
142
+ int val;
143
+ Node* left;
144
+ Node* right;
145
+ Node* parent;
146
+ };
147
+ */
148
+
149
+ class Solution {
150
+ public:
151
+ Node* flipBinaryTree(Node* root, Node * leaf) {
152
+ Node* cur = leaf;
153
+ Node* p = cur->parent;
154
+ while (cur != root) {
155
+ Node* gp = p->parent;
156
+ if (cur->left) {
157
+ cur->right = cur->left;
158
+ }
159
+ cur->left = p;
160
+ p->parent = cur;
161
+ if (p->left == cur) {
162
+ p->left = nullptr;
163
+ } else if (p->right == cur) {
164
+ p->right = nullptr;
165
+ }
166
+ cur = p;
167
+ p = gp;
168
+ }
169
+ leaf->parent = nullptr;
170
+ return leaf;
171
+ }
172
+ };
173
+ ```
174
+
175
+ ### **C#**
176
+
177
+ ```cs
178
+ /*
179
+ // Definition for a Node.
180
+ public class Node {
181
+ public int val;
182
+ public Node left;
183
+ public Node right;
184
+ public Node parent;
185
+ }
186
+ */
187
+
188
+ public class Solution {
189
+ public Node FlipBinaryTree(Node root, Node leaf) {
190
+ Node cur = leaf;
191
+ Node p = cur.parent;
192
+ while (cur != root) {
193
+ Node gp = p.parent;
194
+ if (cur.left != null) {
195
+ cur.right = cur.left;
196
+ }
197
+ cur.left = p;
198
+ p.parent = cur;
199
+ if (p.left == cur) {
200
+ p.left = null;
201
+ } else if (p.right == cur) {
202
+ p.right = null;
203
+ }
204
+ cur = p;
205
+ p = gp;
206
+ }
207
+ leaf.parent = null;
208
+ return leaf;
209
+ }
210
+ }
211
+ ```
212
+
213
+ ### ** JavaScript**
214
+
215
+ ``` js
216
+ /**
217
+ * // Definition for a Node.
218
+ * function Node(val) {
219
+ * this.val = val;
220
+ * this.left = null;
221
+ * this.right = null;
222
+ * this.parent = null;
223
+ * };
224
+ */
66
225
226
+ /**
227
+ * @param {Node} node
228
+ * @return {Node}
229
+ */
230
+ var flipBinaryTree = function (root , leaf ) {
231
+ let cur = leaf;
232
+ let p = cur .parent ;
233
+ while (cur != root) {
234
+ const gp = p .parent ;
235
+ if (cur .left != null ) {
236
+ cur .right = cur .left ;
237
+ }
238
+ cur .left = p;
239
+ p .parent = cur;
240
+ if (p .left == cur) {
241
+ p .left = null ;
242
+ } else if (p .right == cur) {
243
+ p .right = null ;
244
+ }
245
+ cur = p;
246
+ p = gp;
247
+ }
248
+ leaf .parent = null ;
249
+ return leaf;
250
+ };
67
251
```
68
252
69
253
### ** ...**
Original file line number Diff line number Diff line change 49
49
### ** Python3**
50
50
51
51
``` python
52
-
52
+ """
53
+ # Definition for a Node.
54
+ class Node:
55
+ def __init__(self, val):
56
+ self.val = val
57
+ self.left = None
58
+ self.right = None
59
+ self.parent = None
60
+ """
61
+
62
+
63
+ class Solution :
64
+ def flipBinaryTree (self , root : " Node" , leaf : " Node" ) -> " Node" :
65
+ cur = leaf
66
+ p = cur.parent
67
+ while cur != root:
68
+ gp = p.parent
69
+ if cur.left:
70
+ cur.right = cur.left
71
+ cur.left = p
72
+ p.parent = cur
73
+ if p.left == cur:
74
+ p.left = None
75
+ elif p.right == cur:
76
+ p.right = None
77
+ cur = p
78
+ p = gp
79
+ leaf.parent = None
80
+ return leaf
53
81
```
54
82
55
83
### ** Java**
56
84
57
85
``` java
86
+ /*
87
+ // Definition for a Node.
88
+ class Node {
89
+ public int val;
90
+ public Node left;
91
+ public Node right;
92
+ public Node parent;
93
+ };
94
+ */
95
+
96
+ class Solution {
97
+ public Node flipBinaryTree (Node root , Node leaf ) {
98
+ Node cur = leaf;
99
+ Node p = cur. parent;
100
+ while (cur != root) {
101
+ Node gp = p. parent;
102
+ if (cur. left != null ) {
103
+ cur. right = cur. left;
104
+ }
105
+ cur. left = p;
106
+ p. parent = cur;
107
+ if (p. left == cur) {
108
+ p. left = null ;
109
+ } else if (p. right == cur) {
110
+ p. right = null ;
111
+ }
112
+ cur = p;
113
+ p = gp;
114
+ }
115
+ leaf. parent = null ;
116
+ return leaf;
117
+ }
118
+ }
119
+ ```
120
+
121
+ ### ** C++**
122
+
123
+ ``` cpp
124
+ /*
125
+ // Definition for a Node->
126
+ class Node {
127
+ public:
128
+ int val;
129
+ Node* left;
130
+ Node* right;
131
+ Node* parent;
132
+ };
133
+ */
134
+
135
+ class Solution {
136
+ public:
137
+ Node* flipBinaryTree(Node* root, Node * leaf) {
138
+ Node* cur = leaf;
139
+ Node* p = cur->parent;
140
+ while (cur != root) {
141
+ Node* gp = p->parent;
142
+ if (cur->left) {
143
+ cur->right = cur->left;
144
+ }
145
+ cur->left = p;
146
+ p->parent = cur;
147
+ if (p->left == cur) {
148
+ p->left = nullptr;
149
+ } else if (p->right == cur) {
150
+ p->right = nullptr;
151
+ }
152
+ cur = p;
153
+ p = gp;
154
+ }
155
+ leaf->parent = nullptr;
156
+ return leaf;
157
+ }
158
+ };
159
+ ```
160
+
161
+ ### **C#**
162
+
163
+ ```cs
164
+ /*
165
+ // Definition for a Node.
166
+ public class Node {
167
+ public int val;
168
+ public Node left;
169
+ public Node right;
170
+ public Node parent;
171
+ }
172
+ */
173
+
174
+ public class Solution {
175
+ public Node FlipBinaryTree(Node root, Node leaf) {
176
+ Node cur = leaf;
177
+ Node p = cur.parent;
178
+ while (cur != root) {
179
+ Node gp = p.parent;
180
+ if (cur.left != null) {
181
+ cur.right = cur.left;
182
+ }
183
+ cur.left = p;
184
+ p.parent = cur;
185
+ if (p.left == cur) {
186
+ p.left = null;
187
+ } else if (p.right == cur) {
188
+ p.right = null;
189
+ }
190
+ cur = p;
191
+ p = gp;
192
+ }
193
+ leaf.parent = null;
194
+ return leaf;
195
+ }
196
+ }
197
+ ```
58
198
199
+ ### ** JavaScript**
200
+
201
+ ``` js
202
+ /**
203
+ * // Definition for a Node.
204
+ * function Node(val) {
205
+ * this.val = val;
206
+ * this.left = null;
207
+ * this.right = null;
208
+ * this.parent = null;
209
+ * };
210
+ */
211
+
212
+ /**
213
+ * @param {Node} node
214
+ * @return {Node}
215
+ */
216
+ var flipBinaryTree = function (root , leaf ) {
217
+ let cur = leaf;
218
+ let p = cur .parent ;
219
+ while (cur != root) {
220
+ const gp = p .parent ;
221
+ if (cur .left != null ) {
222
+ cur .right = cur .left ;
223
+ }
224
+ cur .left = p;
225
+ p .parent = cur;
226
+ if (p .left == cur) {
227
+ p .left = null ;
228
+ } else if (p .right == cur) {
229
+ p .right = null ;
230
+ }
231
+ cur = p;
232
+ p = gp;
233
+ }
234
+ leaf .parent = null ;
235
+ return leaf;
236
+ };
59
237
```
60
238
61
239
### ** ...**
You can’t perform that action at this time.
0 commit comments