(java)leetcode Lowest Common Ancestor of a Binary Search Tree
2015-11-10 14:12
579 查看
Given a binary search tree (BST), find the lowest common ancestor (LCA) of two given nodes in the BST.
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.
思路:因为是在一棵bst树中查找,如果两个节点的较大值比当前节点的值小,则共同祖先一定在当前节点的左子树中。
如果当前节点的值比两个节点的较小值还小,则共同祖先一定在当前节点的右子树中。
若当前节点的值在给的两个节点值得中间,则当前节点就是这两个节点的共同祖先。
代码如下( 已通过leetcode)
public class Solution {
public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {
if(p==null || q==null) return null;
if(root.val<Math.min(p.val, q.val)) return lowestCommonAncestor(root.right, p, q);
if(root.val>Math.max(p.val, q.val)) return lowestCommonAncestor(root.left, p, q);
return root;
}
}
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).”
_______6______ / \ ___2__ ___8__ / \ / \ 0 _4 7 9 / \ 3 5
For example, the lowest common ancestor (LCA) of nodes
2and
8is
6.
Another example is LCA of nodes
2and
4is
2,
since a node can be a descendant of itself according to the LCA definition.
思路:因为是在一棵bst树中查找,如果两个节点的较大值比当前节点的值小,则共同祖先一定在当前节点的左子树中。
如果当前节点的值比两个节点的较小值还小,则共同祖先一定在当前节点的右子树中。
若当前节点的值在给的两个节点值得中间,则当前节点就是这两个节点的共同祖先。
代码如下( 已通过leetcode)
public class Solution {
public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {
if(p==null || q==null) return null;
if(root.val<Math.min(p.val, q.val)) return lowestCommonAncestor(root.right, p, q);
if(root.val>Math.max(p.val, q.val)) return lowestCommonAncestor(root.left, p, q);
return root;
}
}
相关文章推荐
- 浅谈java中replace()和replaceAll()的区别
- (java)leetcode Valid Anagram
- spring ioc原理(看完后大家可以自己写一个spring)
- equals学习笔记
- spring技术详解
- springmvc 工作原理
- 邮箱常用端口
- 各种排序算法的分析及java实现
- 关于eclipse导入工程出现“SystemProperties cannot be resolved”时的解决方法
- JAVA设计模式之单例模式
- java碰撞小球
- Mac系统安装JavaSE
- windows下 android jdk sdk环境配置
- Java并发编程:volatile关键字解析
- java基础知识点一(下)
- Eclipse选中变量名,相同变量都变色显示 的设置
- JAVA 创建文件和文件夹,删除文件和文件夹,复制文件和文件夹,移动文件和文件夹的实用工具类
- 关于eclipse adb的一些问题
- 深入学习微框架:Spring Boot
- eclipse下安装和使用AmaterasUML、ModelSpoon生成Java类图