C++两行代码解决 | #二叉搜索树的最近公共祖先#

二叉搜索树的最近公共祖先

https://www.nowcoder.com/practice/d9820119321945f588ed6a26f0a6991f

class Solution {
public:
    int lowestCommonAncestor(TreeNode* root, int p, int q) {
        // write code here
        if((root->val - p) * (root->val - q) <= 0) return root->val;
        return root->val - p < 0 ? lowestCommonAncestor(root->right,p,q) : lowestCommonAncestor(root->left,p,q);

    }
};

因为本题是在二叉搜索树上找最近公共祖先,由于二叉搜索树具有左子树都小于根节点右子树都大于根节点的特性,故当找到最近公共祖先时,会出先p和q分布在根节点两侧或p和q有一点位于根节点(即(root->val - p) * (root->val - q) <= 0),此时返回当前节点值即可(不用继续向下),如果没有找到最近公共祖先(即(root->val - p) * (root->val - q) > 0),则需要根据root->val和p的大小关系选择递归左子树还是右子树(另一边不需要遍历)。

That's all

空间复杂度:O(n),最差的情况为链表且需要找的两个节点位于末端

时间复杂度:O(n),原因同上

全部评论

相关推荐

昨天 15:12
门头沟学院 运营
面向对象的火龙果很爱...:去吃一顿炸鸡就走
点赞 评论 收藏
分享
06-25 09:33
厦门大学 Java
程序员饺子:现在日常估计没啥hc了,等到八月多估计就慢慢有了。双九✌🏻不用焦虑的
投递快手等公司8个岗位
点赞 评论 收藏
分享
07-03 11:02
中山大学 C++
字节刚oc,但距离九月秋招很近了有两段互联网实习,非腾讯字节。不敢赌转正,现在在纠结去还是不去如果实习俩月离职会有什么后果吗
阿城我会做到的:不去后悔一辈子,能否转正取决于ld的态度,只要他不卡,答辩就是走流程,个人觉得可以冲一把
投递字节跳动等公司8个岗位
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务