您的位置:首页 > 编程语言 > Java开发

(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).”
_______6______
/              \
___2__          ___8__
/      \        /      \
0      _4       7       9
/  \
3   5


For example, the lowest common ancestor (LCA) of nodes
2
and
8
is
6
.
Another example is LCA of nodes
2
and
4
is
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;

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: