【LeetCodehot100】二叉树大合集 T94:二叉树的中序遍历 T104:二叉树的最大深度 T226:翻转二叉树 T101:对称二叉树

今天题目不算难,我们来个二叉树大集合

T94:二叉树的中序遍历

题目理解 :

给定一个二叉树根节点root,返回它的中序遍历结果。

核心思路(递归)

递归的本质:

当前节点的结果 = 左子树结果 + 当前节点 + 右子树结果

每次调用:

dfs(node)

其实是在做:

遍历"以 node 为根的整棵子树"

代码实现

java 复制代码
//创建结果集合
List<Integer> res=new ArrayList<>();

//调用递归函数
dfs(root,res);
//返回结果
return res;

//中序遍历
private void dfs(TreeNode node,List<Integer> res){
//中止条件:节点为空
  if(node==null){
     return ; 
  }
  //遍历左子树
  dfs(node.left,res);
  //中间
  res.add(node.val);
  //右
  dfs(node.right,res);
}

题目感悟

第一次接触树结构,有一些语法需要熟悉,比如:TreeNode

感觉着这就像基础数据,需要记牢,并没有考察太大的思维点。

流程:

创建List集合存放数据

定义中序遍历函数dfs------>终止条件,左遍历,访问中间节点,右遍历。

T104:二叉树的最大深度

题目要求:求二叉树的最大深度

核心思想

本题挺简单的,就只有一个小易错点

不要将返回的长度忘记+1,也就是忘了把根节点加上去。

代码实现

java 复制代码
class Solution {
    public int maxDepth(TreeNode root) {
        // 终止条件:空节点深度为0
        if (root == null) {
            return 0;
        }

        // 递归计算左子树深度
        int leftDepth = maxDepth(root.left);

        // 递归计算右子树深度
        int rightDepth = maxDepth(root.right);

        // 返回最大深度 + 当前节点
        return Math.max(leftDepth, rightDepth) + 1;
    }
}

本题感悟

  1. 别忘了+1
  2. 查找树深度的语法为maxDepth();

T226:翻转二叉树

题目要求:给你一棵二叉树的根节点 root ,翻转这棵二叉树,并返回其根节点。

简单来说,就是将左子树与右子树进行位置互换

纠正一个概念

我第一下看到返回值是一串数字,下意识认为需要创建一个结果集合来存放结果。但其实只需要return root就行了。

rootroot = 一个数字(比如 4) ❌ 这个理解是不对的

root是节点对象里面包含三种元素

java 复制代码
root = {
    val: 4,
    left: (节点2),
    right: (节点7)
}

代码实现

java 复制代码
class Solution {
    public TreeNode invertTree(TreeNode root) {
        // 终止条件
        if (root == null) {
            return null;
        }

        // 交换左右子树
        TreeNode temp = root.left;
        root.left = root.right;
        root.right = temp;

        // 递归翻转左右子树
        invertTree(root.left);
        invertTree(root.right);

        return root;
    }
}

本题感悟

  1. 递归思想:自己调用自己

T101:对称二叉树

题目要求:给你一个二叉树的根节点 root , 检查它是否轴对称。

核心思路

本题不是遍历一颗树

而是:

同时比较两颗镜像树

一句话核心:

左子树的左 == 右子树的右

左子树的右 == 右子树的左

代码实现

java 复制代码
class Solution {
    public boolean isSymmetric(TreeNode root) {
        // 空树一定对称
        if (root == null) return true;

        // 比较左右子树
        return isMirror(root.left, root.right);
    }

    private boolean isMirror(TreeNode left, TreeNode right) {
        // 情况1:都为空 → 对称
        if (left == null && right == null) {
            return true;
        }

        // 情况2:一个为空,一个不为空 → 不对称
        if (left == null || right == null) {
            return false;
        }

        // 情况3:值不相等 → 不对称
        if (left.val != right.val) {
            return false;
        }

        // 情况4:递归比较"镜像位置"
        return isMirror(left.left, right.right)
            && isMirror(left.right, right.left);
    }
}

本题感悟

  1. 比较的概念,是左子树的左 == 右子树的右 左子树的右 == 右子树的左
  2. 关于是否镜像对称的判断,分为5步:1.root是否为空 2.是否都为空3.是否一个是空一个不是空 4.左右值是否相等 5.继续递归比较
相关推荐
子兮曰4 天前
jev-ultrafast 深度解析:7 秒订机票的浏览器 Agent 是如何炼成的
前端·后端·agent
子兮曰4 天前
Jev 爆发一周:7 秒 Agent 背后的 System One 生态与三场争议
前端·后端·ai编程
倒头就睡的小比特4 天前
算法竞赛C++常用的STL
c++·算法
小羊没烦恼!4 天前
初探性能优化——2个月到4小时的性能提升
java·开发语言·windows·算法·c#
爱勇宝4 天前
ZCode 开源 24 小时:一份没有历史的账本,回答不了"有没有偷代码"
前端·后端·chatglm (智谱)
胡写代码4 天前
别再前后端各写一套表单校验了
java·后端
大勇前进4 天前
原生 PHP 还是 Laravel?小项目到底要不要上框架
后端
猎头南楼4 天前
知识社区推荐系统实践:新用户冷启动与长短期兴趣建模的挑战 资深推荐算法工程师
人工智能·深度学习·算法·机器学习
yuzhi_liu4 天前
我用 LangGraph4j 实现 Multi-Agent Supervisor
后端
alsmile4 天前
Node-RED 之外,国产规则引擎的新方案:基于标准语法,Go 先行实现
后端·开源·go