【LeetCode-中等题】236. 二叉树的最近公共祖先

文章目录

    • 题目
    • [方法一:后序遍历 + 回溯](#方法一:后序遍历 + 回溯)

题目

方法一:后序遍历 + 回溯

解题的核心就是:采用后序遍历

  1. 讨论p,q是否在当前的root的两边,如在两边则返回当前节点root
  1. 如何不在两边,只要出现一个节点等于p或者q就返回当前节点
java 复制代码
// 后序遍历  + 回溯
    public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {
        if(root == null) return null;//即做节点判空条件、、也做递归出口 (说明递归到null  都没有找到  p或q)

        if(root == p || root == q)  return root;//  说明(当前要递归的节点就是p或q直接返回)或递归找到了p或q  就不用再往下递归了 结束此次递归  返回 p 或 q

        TreeNode left = lowestCommonAncestor(root.left,p,q);//递归左子树,返回值就是找到的p或q  没找到就是null
        TreeNode right = lowestCommonAncestor(root.right,p,q);//递归右子树返回值就是找到的p或q  没找到就是null

        if(left!=null  && right!=null) return root;
        // 如果遍历左右子树 在左子树或右子树找到了都找到了(  p  或  q  )
        //  说明当前结点就是  p  q  的最近公共祖先
        
        if(left != null && right == null) return left;
        //如果当前遍历左右子树结点只找到  一个 (q 或者 p)
        //说明下一个p或者q其实就是在这个结点下面 因为一旦找到了p 或q就不会往下遍历了,
       // 所以一旦出现只能找到一个(q  或  p)的情况 说明这个这个节点即是(p 或 q) 又是q 和 p 的最近公共祖先
        if(right != null && left==null) return right; 

        return null;//所有都不满足直接返回null
    }

二叉树的最近公共祖先(DFS ,清晰图解)

相关推荐
博界IT精灵6 分钟前
图的遍历(哈喜老师)
数据结构·考研·算法·深度优先
sheeta199814 分钟前
LeetCode 每日一题笔记 日期:2026.05.10 题目:2770. 达到末尾下标所需的最大跳跃次数
笔记·算法·leetcode
Halo_tjn19 分钟前
基于异常处理机制 相关知识点
java·开发语言·算法
xingyuzhisuan33 分钟前
适合微调Llama 3 70B模型的最低GPU配置推荐
运维·人工智能·算法·llama·gpu算力
IJCAST1 小时前
Exploring the Frontiers of Complexity: Latest Research from IJCAST
人工智能·深度学习·神经网络·算法
所以遗憾是什么呢?1 小时前
【题解】Codeforces Round 1097 (Div. 2, Based on Zhili Cup 2026) (致理杯) ABCDEF
数据结构·算法·acm·codeforces·icpc·ccpc·xcpc
wuweijianlove1 小时前
算法优化中的控制流重构与分支预测机制的技术7
算法·重构
Yuezero_1 小时前
Latent Manifold理论分析
人工智能·算法·机器学习
山北雨夜漫步1 小时前
LangGraph
java·前端·算法
李佳鹏1 小时前
96% 成功率,零标注数据:我用 PCA + Hungarian 解了这道几何题
算法