剑指 Offer 68 - I. 二叉搜索树的最近公共祖先

简介: 剑指 Offer 68 - I. 二叉搜索树的最近公共祖先

给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先。

image.png

二叉搜索树的性质:左子树都比当前结点小,右子树都比当前结点大。

① 如果两个节点值都小于根节点,说明他们都在根节点的左子树上,我们往左子树上找。

②如果两个节点值都大于根节点,说明他们都在根节点的右子树上,我们往右子树上找。

③如果一个节点值大于根节点,一个节点值小于根节点,说明他们他们一个在根节点的左子树上一个在根节点的右子树上,那么根节点就是他们的最近公共祖先节点。

对比二叉树那题,显然发现二叉搜索树根据它的性质,使搜索方向非常明确。

TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) {
        int mint=min(p->val,q->val);
        int maxt=max(p->val,q->val);
        while(root){
            if(root->val<=maxt&&root->val>=mint){//等于号是因为可能p为q祖先或者q为p祖先
                return root;
            }
            if(root->val<p->val&&root->val<q->val){
                root=root->right;
            }else{
                root=root->left;
            }
        }
        return root;
    }
相关文章
|
6月前
剑指 Offer 54:二叉搜索树的第k大节点
剑指 Offer 54:二叉搜索树的第k大节点
51 0
|
6月前
|
存储
【LeetCode】剑指 Offer 54. 二叉搜索树的第k大节点
【LeetCode】剑指 Offer 54. 二叉搜索树的第k大节点
47 1
|
6月前
剑指 Offer 68 - I:二叉搜索树的最近公共祖先
剑指 Offer 68 - I:二叉搜索树的最近公共祖先
446 0
|
6月前
剑指 Offer 68 - II:二叉树的最近公共祖先
剑指 Offer 68 - II:二叉树的最近公共祖先
36 0
|
6月前
剑指 Offer 55 - II:平衡二叉树
剑指 Offer 55 - II:平衡二叉树
41 0
|
6月前
剑指 Offer 33:二叉搜索树的后序遍历序列
剑指 Offer 33:二叉搜索树的后序遍历序列
33 0
|
6月前
剑指 Offer 07:重建二叉树
剑指 Offer 07:重建二叉树
33 0
图解LeetCode——剑指 Offer 68 - II. 二叉树的最近公共祖先
图解LeetCode——剑指 Offer 68 - II. 二叉树的最近公共祖先
4689 1