【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.继续递归比较
相关推荐
吃好睡好便好6 小时前
在Matlab中绘制横直方图
开发语言·学习·算法·matlab
仰泳之鹅7 小时前
【C语言】自定义数据类型2——联合体与枚举
c语言·开发语言·算法
candyTong7 小时前
Claude Code 的 Edit 工具是怎么工作的
javascript·后端·架构
GetcharZp9 小时前
GitHub 2.4 万 Star!D2 正在重新定义程序员画图方式
后端
x_yeyue9 小时前
三角形数
笔记·算法·数论·组合数学
念何架构之路10 小时前
Go语言加密算法
数据结构·算法·哈希算法
AI科技星10 小时前
《数学公理体系·第三部·数术几何》(2026 年版)
c语言·开发语言·线性代数·算法·矩阵·量子计算·agi
失去的青春---夕阳下的奔跑10 小时前
560. 和为 K 的子数组
数据结构·算法·leetcode
zhangxingchao10 小时前
多 Agent 架构到底怎么选?从 Claude Agent Teams、Cognition/Devin 到工程落地原则
前端·人工智能·后端
IT_陈寒10 小时前
SpringBoot那个自动配置的坑,害我排查到凌晨三点
前端·人工智能·后端