【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 ,清晰图解)

相关推荐
闲人xyz2 分钟前
02|Tool Runtime 不是工具箱,而是行动层:从 FileRead / FileEdit 看到 Agent 工程
算法
AI专业测评7 分钟前
2026网文圈大地震:顶配AI写作神器实测,这几款让“代练”彻底失业
人工智能·算法·aigc·ai写作
智者知已应修善业9 分钟前
【数字稳压控制DAC/TLC5615驱动】2023-5-27
c++·经验分享·笔记·算法·51单片机
爱写代码的倒霉蛋10 分钟前
2021年天梯赛L1-8
数据结构·算法
阿Y加油吧12 分钟前
动态规划入门必刷:不同路径 & 最小路径和 详解
算法·动态规划
ximen502_19 分钟前
算法面试题
java·数据结构·算法
zzzsde21 分钟前
【Linux】进程信号(2)保存信号与信号处理
linux·运维·服务器·算法
QuZero32 分钟前
Semaphore Principle
java·算法
ZPC821036 分钟前
自定义机械臂驱动(Action Server + /joint_states 发布)
算法
啊我不会诶37 分钟前
牛客练习赛151
算法·深度优先·图论