二叉搜索树的最近公共祖先
给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先。
说明:
1、所有节点的值都是唯一的。
2、p、q 为不同节点且均存在于给定的二叉搜索树中。

public class TreeNode {
int val;
TreeNode left;
TreeNode right;
TreeNode(int x) { val = x; }
}
/**
* 二叉搜索树的最近公共祖先:分情况进行讨论
* @param root
* @param p
* @param q
* @return
*/
public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {
if (root ==null ) {
return null;
}
//当p和q都在root的一侧时,在root的左右子树上递归调用即可
if(p.val< root.val && q.val <root.val){
return lowestCommonAncestor(root.left, p ,q);
}
if(p.val >root.val && q.val >root.val){
return lowestCommonAncestor(root.right,p,q);
}
//当p和q在root的两侧时,最近公共祖先就是root,
//当p或者q有一个为root时,最近公共祖先也是root
return root;
}
本文介绍了一种在二叉搜索树中查找两个指定节点最近公共祖先的方法。通过对比节点值,若p和q均小于当前节点值,则递归左子树;反之则递归右子树。当p和q分布于当前节点两侧或其中之一为当前节点时,即找到最近公共祖先。
&spm=1001.2101.3001.5002&articleId=106742911&d=1&t=3&u=371321a97108460884c6ea8170cb2003)
2193

被折叠的 条评论
为什么被折叠?



