''' 解题思路: 1、先dfs搜索,返回节点路径 2、取路径交集返回最近的交点 ''' # class TreeNode: # def __init__(self, x): # self.val = x # self.left = None # self.right = None # # @param root TreeNode类 # @param o1 int整型 # @param o2 int整型 # @return int整型 # def dfs(root,o1,res): if root.val == o1: #print('res=',res) return res if root.left: t = dfs(root.left,o1,res+[root.left.val]) if t: return t if root.right: t = dfs(root.right,o1,res+[root.right.val]) if t: return t class Solution: def lowestCommonAncestor(self , root , o1 , o2 ): # write code here L1 = dfs(root,o1,[root.val]) L2 = dfs(root,o2,[root.val]) #print(L1) #print(L2) L1 = L1[::-1] L2 = L2[::-1] for i in L1: for j in L2: if i==j: return i return None root = TreeNode(1) root.left = TreeNode(2) root.right = TreeNode(3) root.left.left = TreeNode(4) root.left.right = TreeNode(5) root.right.left = TreeNode(6) root.right.right = TreeNode(7) print(Solution().lowestCommonAncestor(root,4,5))