【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.继续递归比较
相关推荐
小雅痞7 小时前
[Java][Leetcode middle] 167. 两数之和 II - 输入有序数组
java·算法·leetcode
CN-Dust7 小时前
【C++】输入cin例题专题
java·c++·算法
数模竞赛Paid answer8 小时前
2025年MathorCup数学建模A题汽车风阻预测解题文档与程序
算法·数学建模·mathorcup
Old Uncle Tom14 小时前
OpenClaw 记忆系统 -- 记忆预加载
java·数据结构·算法·agent
会编程的土豆14 小时前
洛谷题单入门1 顺序结构
数据结构·算法·golang
生信碱移14 小时前
PACells:这个方法可以鉴定疾病/预后相关的重要细胞亚群,作者提供的代码流程可以学习起来了,甚至兼容转录组与 ATAC 两种数据类型!
人工智能·学习·算法·机器学习·数据挖掘·数据分析·r语言
前端一小卒15 小时前
我用 Claude Code 的 Superpowers 技能链写了个服务,部署前差点把服务器搞炸
前端·javascript·后端
智者知已应修善业15 小时前
【51单片机中的打飞机设计】2023-8-25
c++·经验分享·笔记·算法·51单片机
曹牧16 小时前
Spring:@RequestMapping注解,匹配的顺序与上下文无关
java·后端·spring
智者知已应修善业17 小时前
【51单片机按键调节占空比3位数码管显示】2023-8-24
c++·经验分享·笔记·算法·51单片机