# class TreeNode:
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = None
#
# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
#
# 
# @param root TreeNode类 
# @param p int整型 
# @param q int整型 
# @return int整型
#
class Solution:
    #利用搜索树的性质,先获取从根节点到两个目标节点的路径
    def getPath(self, root: TreeNode, target:int)->List[int]:
        if root==None:
            return []
        
        path=[]
        node=root
        while target!=node.val:           
            if target<node.val:
                path.append(node.val)
                node=node.left
            elif target>node.val:
                path.append(node.val)
                node=node.right
                
        path.append(node.val)#while循环跳出时,说明target==node.val,要把node.val添进path
        return path
        
    #再比较两个目标节点路径上最近的共同节点    
    def lowestCommonAncestor(self , root: TreeNode, p: int, q: int) -> int:
        path1=self.getPath(root,p)
        path2=self.getPath(root,q)
        minpathDepth=min(len(path1),len(path2))
        for i in range(minpathDepth):
            if path1[i]==path2[i]:
                res=path1[i]        
        return res

如果getPath这里想要递归调用,参考下面写法:

class Solution:
    def getPath(self, root: TreeNode, target:int, path=[]):        
        if root==None:
            return root
        else:
            ## path=[]如果添加,每次迭代都会更新path
            if target==root.val:
                path.append(root.val)
            elif target<root.val:
                path.append(root.val)
                self.getPath(root.left,target,path)
            elif target>root.val:
                path.append(root.val)
                self.getPath(root.right,target,path)
            return path

调用时写path1=self.getPath(root,p,[])。(ps:这里要采用把path作为一个自变量传入函数getPath中的做法。否则需要在代码里面添加初始化path=[]语句。这样会导致每次迭代会重新初始化一次,就达不到连续记录路径的目的了。