【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.继续递归比较
相关推荐
不想看见4041 小时前
Search a 2D Matrix II数组--力扣101算法题解笔记
数据结构·算法
IronMurphy2 小时前
【算法二十六】108. 将有序数组转换为二叉搜索树 98. 验证二叉搜索树
数据结构·算法·leetcode
2501_921649492 小时前
美股历史 K线数据 API接口综合评测与接入指南
后端·python·websocket·金融·restful
jaysee-sjc2 小时前
【练习十二】Java实现年会红包雨小游戏
java·开发语言·算法·游戏·intellij-idea
im_AMBER2 小时前
Leetcode 141 最长公共前缀 | 罗马数字转整数
算法·leetcode
InfiniSynapse2 小时前
连上Snowflake就能取数:InfiniSynapse + Spider2-Snow实战企业数据分析
数据结构·图像处理·人工智能·算法·语言模型·数据挖掘·数据分析
码界奇点2 小时前
基于ASP.NET Core的内容管理系统设计与实现
c++·后端·车载系统·毕业设计·asp.net·源代码管理
IT_陈寒2 小时前
React开发者都在偷偷用的5个性能优化黑科技,你知道几个?
前端·人工智能·后端
wuyaolong0073 小时前
Spring Boot 3.4 正式发布,结构化日志!
java·spring boot·后端