# Lowest Common Ancestor of a Binary Tree

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.

class Solution(object):
def lowestCommonAncestor(self, root, p, q):
"""
:type root: TreeNode
:type p: TreeNode
:type q: TreeNode
:rtype: TreeNode
"""
        ＃在root为根的二叉树中找A,B的LCA:
＃如果找到了就返回这个LCA
＃如果只碰到A，就返回A ＃如果只碰到B，就返回B ＃如果都没有，就返回None        if root in (None,p,q): ＃node为空则返回空，node等于p或者q则返回该结点的值　　　　　　　　return root
        left = self.lowestCommonAncestor(root.left,p,q)
right = self.lowestCommonAncestor(root.right,p,q)

if left and right:
return root
if left:
return left
if right:
return right
return None   #左右结点都不包含要寻找的结点，且该结点本身也不是，则返回None

06-13 1276