# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
#
# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
#
#
# @param root TreeNode类
# @param o1 int整型
# @param o2 int整型
# @return int整型
#
class Solution:
def __init__(self) -> None:
self.paths = []
self.pathhis = []
def findp(self,root,p):
if root is None:
return False
else:
self.pathhis.append(root.val)
if root.val==p:
self.paths.append(self.pathhis)
self.pathhis = []
return True
else:
leftg = self.findp(root.left,p)
rightg = self.findp(root.right,p)
flag = leftg or rightg
if flag is False:
self.pathhis.pop()
return flag
def lowestCommonAncestor(self , root: TreeNode, p: int, q: int) -> int:
# write code here
getp = self.findp(root,p)
getq = self.findp(root,q)
i = 0
res = root.val
# 比较两个路径,找到第一个不同的点
path1 = self.paths[0]
path2 = self.paths[1]
while i < len(path1) and i < len(path2):
if path1[i] == path2[i]:
# 最后一个相同的节点就是最近公共祖先
res = path1[i]
i += 1
else:
break
return res