Skip to content

Commit 6a7be56

Browse files
committed
feat: add solutions to lc problem: No.1666
No.1666.Change the Root of a Binary Tree
1 parent 06ffca3 commit 6a7be56

File tree

7 files changed

+528
-1
lines changed

7 files changed

+528
-1
lines changed

solution/1600-1699/1666.Change the Root of a Binary Tree/README.md

Lines changed: 184 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,22 +48,206 @@
4848

4949
<!-- 这里可写通用的实现逻辑 -->
5050

51+
**方法一:自底向上模拟**
52+
53+
从叶节点 `leaf` 开始,向上模拟翻转操作。
54+
55+
时间复杂度 $O(n)$,空间复杂度 $O(1)$。其中 $n$ 为二叉树节点个数。
56+
5157
<!-- tabs:start -->
5258

5359
### **Python3**
5460

5561
<!-- 这里可写当前语言的特殊实现逻辑 -->
5662

5763
```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+
5874

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
5993
```
6094

6195
### **Java**
6296

6397
<!-- 这里可写当前语言的特殊实现逻辑 -->
6498

6599
```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+
*/
66225

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+
};
67251
```
68252

69253
### **...**

solution/1600-1699/1666.Change the Root of a Binary Tree/README_EN.md

Lines changed: 179 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,13 +49,191 @@
4949
### **Python3**
5050

5151
```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
5381
```
5482

5583
### **Java**
5684

5785
```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+
```
58198

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+
};
59237
```
60238

61239
### **...**

0 commit comments

Comments
 (0)