二叉树公共父节点
思路:
分别算:root 到p,root 到q 的路径
比如:
3 5
3 1
那么3就是最近父亲节点
# Definition for a binary tree node.
class TreeNode:
def __init__(self, x):
self.val = x
self.left = None
self.right = None
class Solution:
def lowestCommonAncestor(self, root: 'TreeNode', p: 'TreeNode', q: 'TreeNode') -> 'TreeNode':
res = []
def dfs(node, stacks, search):
if node is None:
return
stacks.append(node)
if node == search:
for item in stacks:
print(item.val)
res.append(item)
return
dfs(node.left, stacks, search)
dfs(node.right, stacks, search)
stack.pop()
return
stack = []
dfs(root, stack, p)
re = res[:]
res.clear()
stack.clear()
print(re)
dfs(root, stack, q)
re2 = res[:]
print(re2)
common = None
i = 0
while i < len(re) and i < len(re2):
if re[i] == re2[i]:
common = re[i]
i += 1
return common
a = TreeNode(3)
b = TreeNode(5)
c = TreeNode(1)
a.left = b
a.right = c
d = TreeNode(6)
e = TreeNode(2)
b.left = d
b.right = e
f = TreeNode(0)
g = TreeNode(8)
c.left = f
c.right = g
h = TreeNode(7)
i = TreeNode(4)
e.left = h
e.right = i
print(Solution().lowestCommonAncestor(a,b,c))