LintCode 474 [Lowest Common Ancestor II]

原题

给一棵二叉树和二叉树中的两个节点,找到这两个节点的最近公共祖先LCA。

两个节点的最近公共祖先,是指两个节点的所有父亲节点中(包括这两个节点),离这两个节点最近的公共的节点。

每个节点除了左右儿子指针以外,还包含一个父亲指针parent,指向自己的父亲。

对于下面的这棵二叉树

  4
 / \
3   7
   / \
  5   6

LCA(3, 5) = 4
LCA(5, 6) = 7
LCA(6, 7) = 7

解题思路

  • 根据p,一路向上找到所有的parent,得到一个list
  • 根据q,一路向上找到所有的parent,得到一个list
  • 从左向右看两个list,最先一样的node即为公共祖先

完整代码

"""
Definition of ParentTreeNode:
class ParentTreeNode:
    def __init__(self, val):
        this.val = val
        this.parent, this.left, this.right = None, None, None
"""
class Solution:
    """
    @param root: The root of the tree
    @param A and B: Two node in the tree
    @return: The lowest common ancestor of A and B
    """ 
    def lowestCommonAncestorII(self, root, p, q):
        list = []
        while p:
            list.append(p)
            p = p.parent
        
        while q:
            if q in list:
                return q
            q = q.parent

你可能感兴趣的:(LintCode 474 [Lowest Common Ancestor II])