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
相关推荐
Allen Wurlitzer23 分钟前
算法刷题记录——LeetCode篇(8.7) [第761~770题](持续更新)
算法·leetcode·职场和发展
悄悄敲敲敲41 分钟前
C++第13届蓝桥杯省b组习题笔记
c++·笔记·算法·蓝桥杯
_殊途1 小时前
算法--滑动窗口
算法
kkk16222451 小时前
matlab有限元求转子临界转速
算法
啥都鼓捣的小yao2 小时前
Python使用SVC算法解决乳腺癌数据集分类问题——寻找最佳核函数
python·算法·分类
Java版蜡笔小新3 小时前
算法-贪心算法
算法·贪心算法
LuckyAnJo3 小时前
Leetcode-100 回溯法-电话号码的字母组合
python·算法·leetcode
HR Zhou3 小时前
群体智能优化算法-鹈鹕优化算法(Pelican Optimization Algorithm, POA,含Matlab源代码)
算法·机器学习·matlab·优化·群体智能优化
LuckyLay4 小时前
LeetCode算法题(Go语言实现)_20
算法·leetcode·职场和发展·golang
Phoebe鑫5 小时前
数据结构每日一题day7(顺序表)★★★★★
算法