二叉搜索树的公共祖先
题目描述
力扣链接🔗
代码思路
递归法
使用二叉搜索树的性质,最近祖先就是在p,q区间,根据搜索二叉树的二叉树进行递归,注意此时找的是根节点,递归到刚好在那个区间的时候返回,那么此时就是最近的公共祖先节点。注意只遍历一条边,要返回值。
/**
* 递归法
*
* @param root
* @param p
* @param q
* @return
*/
public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {
if (root == null) {
return root;
}
if (root.val > p.val && root.val > q.val) { // 都大于搜索的值的话,向左边搜索,此时不知道p,q大小,需要都做判断
TreeNode left = lowestCommonAncestor(root.left, p, q);
if (left != null) { // 只遍历一条边,此时如果找到直接返回
return left;
}
} else if (root.val < p.val && root.val < q.val) { // 都小于搜索的值的话,向右边搜索,此时不知道p,q大小,需要都做判断
TreeNode right = lowestCommonAncestor(root.right, p, q);
if (right != null) {
return right;
}
}
return root;
}
迭代法
/**
* 迭代法
*
* @param root
* @param p
* @param q
* @return
*/
public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {
while (root != null) {
if (root.val > p.val && root.val > q.val) {
root = root.left;
} else if (root.val < p.val && root.val < q.val) {
root = root.right;
}else {
return root;
}
}
return null;
}