Leetcode236.二叉树的最近公共祖先(HOT100)

链接

代码:

cpp 复制代码
class Solution {
public:
    TreeNode* ans = nullptr;
    TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) {
        dfs(root,p,q);
        return ans;//dfs方法会把答案写在ans中我们返回即可
    }
    int dfs(TreeNode* root,TreeNode* p,TreeNode*q){
        if(root==nullptr){
            return 0;
        }
        //我们使用state的低两位表示 p q是否有找到,比如00代表都没有找到,10代表q找到了,p没有找到
        int state = dfs(root->left,p,q);//遍历左子树找pq
        if(root==p)state|=1;//然后再看根节点
        else if(root==q)state|=2;
        state|=dfs(root->right,p,q);//然后再看右子树
        if(state==3&&ans==nullptr){//如果是3,还不能盲目更新,要看之前是否有更新过,dfs是从底层上来的,如果之前更新过,现在就不要更新了
            ans = root;
        }
        return state;
    }
};
https://www.acwing.com/video/1620/

代码二:

cpp 复制代码
class Solution {
public:
    TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) {
        if(!root||root==p||root==q){
            return root;
        }
        auto left = lowestCommonAncestor(root->left,p,q);
        auto right = lowestCommonAncestor(root->right,p,q);
        if(left&&right){
            return root;
        }
        if(left){
            return left;
        }
        if(right){
            return right;
        }
        return nullptr;
    }
};


https://www.bilibili.com/video/BV19t411w7Ep?t=3436.9
相关推荐
非著名架构师25 分钟前
极端天气下的供应链韧性:制造企业如何构建气象风险防御体系
大数据·人工智能·算法·制造·疾风气象大模型·风光功率预测
星轨初途33 分钟前
数据结构排序算法详解(2)——选择排序(附动图)
c语言·数据结构·经验分享·笔记·b树·算法·排序算法
kaikaile19952 小时前
基于 MATLAB 的室内三维定位
算法
AGI前沿2 小时前
AdamW的继任者?AdamHD让LLM训练提速15%,性能提升4.7%,显存再省30%
人工智能·算法·语言模型·aigc
Tan_Ying_Y2 小时前
什么是垃圾回收算法 他的底层原理是什么?
算法
Xの哲學2 小时前
Linux 分区表深度技术剖析
linux·网络·算法·架构·边缘计算
写写闲篇儿2 小时前
经典算法题剖析之传递信息(三)
算法
上不如老下不如小2 小时前
2025年第七届全国高校计算机能力挑战赛初赛 Python组 编程题汇总
开发语言·python·算法
小年糕是糕手3 小时前
【C++】类和对象(二) -- 构造函数、析构函数
java·c语言·开发语言·数据结构·c++·算法·leetcode
kupeThinkPoem3 小时前
跳表有哪些算法?
数据结构·算法