Skip to content

Commit eaccd1b

Browse files
authored
Create Lowest-Common-Ancestor-of-a-Binary-Search-Tree.py
1 parent 780ef5e commit eaccd1b

File tree

1 file changed

+41
-0
lines changed

1 file changed

+41
-0
lines changed
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
# Definition for a binary tree node.
2+
# class TreeNode:
3+
# def __init__(self, x):
4+
# self.val = x
5+
# self.left = None
6+
# self.right = None
7+
8+
class Solution:
9+
def lowestCommonAncestor(self, root: 'TreeNode', p: 'TreeNode', q: 'TreeNode') -> 'TreeNode':
10+
if root == None:
11+
return None
12+
if p.val < root.val and q.val > root.val:
13+
return root
14+
elif p.val > root.val and q.val < root.val:
15+
return root
16+
17+
def search(root, val, path):
18+
if root == None:
19+
return None
20+
if root.val == val:
21+
path.append(root)
22+
return path
23+
path.append(root)
24+
if root.val > val:
25+
return search(root.left, val, path)
26+
elif root.val < val:
27+
return search(root.right, val, path)
28+
29+
p_path = search(root, p.val, [])
30+
q_path = search(root, q.val, [])
31+
lca = None
32+
while p_path and q_path:
33+
p_node = p_path.pop(0)
34+
q_node = q_path.pop(0)
35+
if q_node.val == p_node.val:
36+
lca = q_node
37+
else:
38+
break
39+
return lca
40+
41+

0 commit comments

Comments
 (0)