您的位置:首页 > 其它

Lowest Common Ancestor of a Binary Tree

2015-08-28 20:24 190 查看
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.
public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {
		if(root == null) return null;
	    if (root == p || root == q) return root;
	    //p,q是否在root的左子树中
	    TreeNode left = lowestCommonAncestor(root.left, p, q);
	    //p,q是否在root的右子树中
	    TreeNode right = lowestCommonAncestor(root.right, p, q);
	    //如果left和right都不为空,则p,q分别在root的左子树和右子树中
	    //这时,root为p,q的LCA
	    if(left != null && right !=null) return root;
	    //如果left和right中又一个为空
	    //则p,q都在root的左子树,或者右子树中
	    //如果left不为空,则left是LCA,否则right为LCA
	    return left != null ? left : right;
	}


http://www.cnblogs.com/easonliu/p/4643873.html

http://articles.leetcode.com/2011/07/lowest-common-ancestor-of-a-binary-tree-part-i.html

Same solution in several languages. It's recursive and expands the meaning of the function. If the current (sub)tree contains both p and q, then the function result is
their LCA. If only one of them is in that subtree, then the result is that one of them. If neither are in that subtree, the result is null/None/nil.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: