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
相关推荐
不打灰的小刘10 分钟前
基于自动反馈的大语言模型纠错策略综述
人工智能·算法·语言模型·chatgpt
dbln29 分钟前
动态规划——完全背包问题
算法·动态规划
浅念同学1 小时前
算法.图论-习题全集(Updating)
java·算法·leetcode·图论
琴鸣天下1 小时前
DAY66||Floyd 算法精讲 |A * 算法精讲 (A star算法)|最短路算法总结篇|图论总结
算法·图论
IT猿手1 小时前
多目标优化算法:多目标红嘴蓝鹊优化算法(MORBMO)求解UF1-UF10,提供完整MATLAB代码
开发语言·人工智能·算法·数学建模·matlab·智能优化算法
学习同学1 小时前
【C++ 算法进阶】算法提升十六
java·c++·算法
是老余1 小时前
leetcode844:比较含退格的字符串
java·开发语言·算法
又菜又爱玩的东哥1 小时前
【C语言】三种方法访问一维数组元素(下标法、指针法、指针变量法)
c语言·开发语言·算法
鲨鱼吃橘子1 小时前
【C++】了解map和set及平衡二叉树和红黑树的原理
c语言·开发语言·数据结构·c++·算法·链表
Romanticroom1 小时前
图论之构造完全图
算法·图论