236. Lowest Common Ancestor of a Binary Tree

来源:互联网 发布:海尔智能软件下载 编辑:程序博客网 时间:2024/06/06 06:56

Given a binary tree, find the lowest common ancestor (LCA) of two given nodes in the tree.

According to the definition of LCA on Wikipedia: “The lowest common ancestor is defined between two nodes v and w as the lowest node in T that has both v and w as descendants (where we allow a node to be a descendant of itself).”

        _______3______       /              \    ___5__          ___1__   /      \        /      \   6      _2       0       8         /  \         7   4

For example, the lowest common ancestor (LCA) of nodes 5 and 1 is 3. Another example is LCA of nodes 5 and 4 is 5, since a node can be a descendant of itself according to the LCA definition.

# Definition for a binary tree node.# class TreeNode(object):#     def __init__(self, x):#         self.val = x#         self.left = None#         self.right = Noneclass Solution(object):    def lowestCommonAncestor(self, root, p, q):        """        :type root: TreeNode        :type p: TreeNode        :type q: TreeNode        :rtype: TreeNode        """        A,B = self.LCA(root, p , q)        return B    def LCA(self, root, p, q):        if not root:            return 0, None        count = 0        if root in [p,q]: count = 1        L,L_N = self.LCA(root.left, p, q)         R,R_N = self.LCA(root.right, p, q)        count += L + R        if count == 2:            return 3, root        if count == 3:            return 3, ( L_N or R_N )        else:            return count, None


0 0
原创粉丝点击