当前位置: 首页 > article >正文

力扣-二叉树-236 二叉树的最近公共祖先

思路1

后序遍历,然后根据根节点是否所寻找的节点,然后再满足最大深度时再更新result即可

代码1

class Solution {
public:
    int maxDeepth = 0;
    int count;
    TreeNode* result;// p=1 q=2
    int backTravesl(TreeNode* node, TreeNode* p, TreeNode* q, int curDeepth){
        if(node == NULL) return 0;
        int left = backTravesl(node->left, p, q, curDeepth+1);
        int right = backTravesl(node->right, p, q, curDeepth+1);

        if(node == p || node == q){
            if(left + right == 1 && curDeepth >= maxDeepth){
                result = node;
                maxDeepth = curDeepth;
            }
            return 1 + left + right;
        } 
        if(left + right == 2 && curDeepth >= maxDeepth){
            result = node;
            maxDeepth = curDeepth;
        }
        return left + right;
    }

    TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) {
        backTravesl(root, p, q, 1);

        return result;
    }
};

思路2

当前节点如果是p或q,直接返回,这样如果当前节点下有另一个p或q,符合题意,如果没有,就退化成第一种p和q在左右的情况了

代码2

class Solution {
public:

    TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) {
        if(root == NULL) return NULL;
        if(root == p || root == q) return root;

        TreeNode* left = lowestCommonAncestor(root->left, p, q);
        TreeNode* right = lowestCommonAncestor(root->right, p, q);

        if(left != NULL && right != NULL) return root;
        else if(left != NULL && right == NULL) return left;
        else if(left == NULL && right != NULL) return right;

        return NULL;
    }
};


http://www.kler.cn/a/554177.html

相关文章:

  • 基于微信小程序的家政服务预约系统的设计与实现(php论文源码调试讲解)
  • 开源语音克隆项目 OpenVoice V2 本地部署
  • umi react+antd 判断渲染消息提示、input搜索、多选按钮组
  • 使用Java爬虫获取1688店铺所有商品信息(item_search_shop API接口)
  • 前端自动化部署的极简方案
  • 985本硕,网络安全方向,走算法还是走开发?
  • 软件测试面试题精选33道,附答案+文档
  • 前端函数在开发环境与生产环境中处理空字符串的差异及解决方案
  • RMSNorm算子的CUDA实现
  • AI前端开发技能提升与ScriptEcho:拥抱智能时代的新机遇
  • 【C++】 Flow of Control
  • vscode通过ssh连接服务器实现免密登录+删除
  • (leetcode42 前缀后缀最值)接雨水
  • MySQL数据库(4)—— 数据类型
  • JavaScript系列(75)--代理模式专题
  • 深入解析NoSQL数据库:从文档存储到图数据库的全场景实践
  • 六、线程间的协作原理场景剖析
  • 基于SpringBoot的“食物营养分析与推荐网站”的设计与实现(源码+数据库+文档+PPT)
  • vxe-grid 通过配置式给单元格字段格式化树结构数据,转换树结构节点
  • Jenkins插件管理切换国内源地址