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).”
For example, the lowest common ancestor (LCA) of nodes
Another example is LCA of nodes
since a node can be a descendant of itself according to the LCA definition.
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.
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
5and
1is
3.
Another example is LCA of nodes
5and
4is
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.
相关文章推荐
- vim转自
- HIBERNATE面试常见问题
- DeepLearning (五) 基于Keras的CNN 训练cifar-10 数据库
- poj 2441 Arrange the Bulls(状态压缩dp)
- kafka测定删除topic及其内容
- tesseract-ocr ubuntu 安装使用
- java的锁机制
- 有关C语言程序内存问题的5条规则
- Android生命周期
- loadrunner 录制脚本时events始终为0
- EL函数以及自定义标签的应用
- [POJ 2236]Wireless Network[并查集]
- Hibernate面试题+答案
- uva 11988 链表 OR 块状链表
- 2015/8/18 Python基本使用(2)
- 详解 CALayer 和 UIView 的区别和联系
- Logistic Regression and Newton's Method Exercise
- Scala学习第五天 Scala数组操作实战详解
- Python实现KNN算法
- MyEclipse6.5下struts2+spring2+hibernate3 整合