Skip to content

Commit 11ff1ab

Browse files
committed
feat: add solutions to lc problem: No.1650
No.1650.Lowest Common Ancestor of a Binary Tree III
1 parent 08a213e commit 11ff1ab

File tree

6 files changed

+282
-2
lines changed

6 files changed

+282
-2
lines changed

solution/1600-1699/1650.Lowest Common Ancestor of a Binary Tree III/README.md

+97-1
Original file line numberDiff line numberDiff line change
@@ -65,15 +65,111 @@
6565
<!-- 这里可写当前语言的特殊实现逻辑 -->
6666

6767
```python
68-
68+
"""
69+
# Definition for a Node.
70+
class Node:
71+
def __init__(self, val):
72+
self.val = val
73+
self.left = None
74+
self.right = None
75+
self.parent = None
76+
"""
77+
78+
79+
class Solution:
80+
def lowestCommonAncestor(self, p: 'Node', q: 'Node') -> 'Node':
81+
a, b = p, q
82+
while a != b:
83+
a = a.parent if a.parent else q
84+
b = b.parent if b.parent else p
85+
return a
6986
```
7087

7188
### **Java**
7289

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

7592
```java
93+
/*
94+
// Definition for a Node.
95+
class Node {
96+
public int val;
97+
public Node left;
98+
public Node right;
99+
public Node parent;
100+
};
101+
*/
102+
103+
class Solution {
104+
public Node lowestCommonAncestor(Node p, Node q) {
105+
Node a = p, b = q;
106+
while (a != b) {
107+
a = a.parent == null ? q : a.parent;
108+
b = b.parent == null ? p : b.parent;
109+
}
110+
return a;
111+
}
112+
}
113+
```
76114

115+
### **C++**
116+
117+
```cpp
118+
/*
119+
// Definition for a Node.
120+
class Node {
121+
public:
122+
int val;
123+
Node* left;
124+
Node* right;
125+
Node* parent;
126+
};
127+
*/
128+
129+
class Solution {
130+
public:
131+
Node* lowestCommonAncestor(Node* p, Node * q) {
132+
Node* a = p;
133+
Node* b = q;
134+
while (a != b)
135+
{
136+
a = a->parent ? a->parent : q;
137+
b = b->parent ? b->parent : p;
138+
}
139+
return a;
140+
}
141+
};
142+
```
143+
144+
### **Go**
145+
146+
```go
147+
/**
148+
* Definition for Node.
149+
* type Node struct {
150+
* Val int
151+
* Left *Node
152+
* Right *Node
153+
* Parent *Node
154+
* }
155+
*/
156+
157+
func lowestCommonAncestor(p *Node, q *Node) *Node {
158+
a, b := p, q
159+
for a != b {
160+
if a.Parent != nil {
161+
a = a.Parent
162+
} else {
163+
a = q
164+
}
165+
if b.Parent != nil {
166+
b = b.Parent
167+
} else {
168+
b = p
169+
}
170+
}
171+
return a
172+
}
77173
```
78174

79175
### **...**

solution/1600-1699/1650.Lowest Common Ancestor of a Binary Tree III/README_EN.md

+97-1
Original file line numberDiff line numberDiff line change
@@ -61,13 +61,109 @@ class Node {
6161
### **Python3**
6262

6363
```python
64-
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+
74+
75+
class Solution:
76+
def lowestCommonAncestor(self, p: 'Node', q: 'Node') -> 'Node':
77+
a, b = p, q
78+
while a != b:
79+
a = a.parent if a.parent else q
80+
b = b.parent if b.parent else p
81+
return a
6582
```
6683

6784
### **Java**
6885

6986
```java
87+
/*
88+
// Definition for a Node.
89+
class Node {
90+
public int val;
91+
public Node left;
92+
public Node right;
93+
public Node parent;
94+
};
95+
*/
96+
97+
class Solution {
98+
public Node lowestCommonAncestor(Node p, Node q) {
99+
Node a = p, b = q;
100+
while (a != b) {
101+
a = a.parent == null ? q : a.parent;
102+
b = b.parent == null ? p : b.parent;
103+
}
104+
return a;
105+
}
106+
}
107+
```
108+
109+
### **C++**
110+
111+
```cpp
112+
/*
113+
// Definition for a Node.
114+
class Node {
115+
public:
116+
int val;
117+
Node* left;
118+
Node* right;
119+
Node* parent;
120+
};
121+
*/
122+
123+
class Solution {
124+
public:
125+
Node* lowestCommonAncestor(Node* p, Node * q) {
126+
Node* a = p;
127+
Node* b = q;
128+
while (a != b)
129+
{
130+
a = a->parent ? a->parent : q;
131+
b = b->parent ? b->parent : p;
132+
}
133+
return a;
134+
}
135+
};
136+
```
70137
138+
### **Go**
139+
140+
```go
141+
/**
142+
* Definition for Node.
143+
* type Node struct {
144+
* Val int
145+
* Left *Node
146+
* Right *Node
147+
* Parent *Node
148+
* }
149+
*/
150+
151+
func lowestCommonAncestor(p *Node, q *Node) *Node {
152+
a, b := p, q
153+
for a != b {
154+
if a.Parent != nil {
155+
a = a.Parent
156+
} else {
157+
a = q
158+
}
159+
if b.Parent != nil {
160+
b = b.Parent
161+
} else {
162+
b = p
163+
}
164+
}
165+
return a
166+
}
71167
```
72168

73169
### **...**
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
/*
2+
// Definition for a Node.
3+
class Node {
4+
public:
5+
int val;
6+
Node* left;
7+
Node* right;
8+
Node* parent;
9+
};
10+
*/
11+
12+
class Solution {
13+
public:
14+
Node* lowestCommonAncestor(Node* p, Node * q) {
15+
Node* a = p;
16+
Node* b = q;
17+
while (a != b)
18+
{
19+
a = a->parent ? a->parent : q;
20+
b = b->parent ? b->parent : p;
21+
}
22+
return a;
23+
}
24+
};
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
/**
2+
* Definition for Node.
3+
* type Node struct {
4+
* Val int
5+
* Left *Node
6+
* Right *Node
7+
* Parent *Node
8+
* }
9+
*/
10+
11+
func lowestCommonAncestor(p *Node, q *Node) *Node {
12+
a, b := p, q
13+
for a != b {
14+
if a.Parent != nil {
15+
a = a.Parent
16+
} else {
17+
a = q
18+
}
19+
if b.Parent != nil {
20+
b = b.Parent
21+
} else {
22+
b = p
23+
}
24+
}
25+
return a
26+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
/*
2+
// Definition for a Node.
3+
class Node {
4+
public int val;
5+
public Node left;
6+
public Node right;
7+
public Node parent;
8+
};
9+
*/
10+
11+
class Solution {
12+
public Node lowestCommonAncestor(Node p, Node q) {
13+
Node a = p, b = q;
14+
while (a != b) {
15+
a = a.parent == null ? q : a.parent;
16+
b = b.parent == null ? p : b.parent;
17+
}
18+
return a;
19+
}
20+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
"""
2+
# Definition for a Node.
3+
class Node:
4+
def __init__(self, val):
5+
self.val = val
6+
self.left = None
7+
self.right = None
8+
self.parent = None
9+
"""
10+
11+
12+
class Solution:
13+
def lowestCommonAncestor(self, p: 'Node', q: 'Node') -> 'Node':
14+
a, b = p, q
15+
while a != b:
16+
a = a.parent if a.parent else q
17+
b = b.parent if b.parent else p
18+
return a

0 commit comments

Comments
 (0)