算法训练营day15

一、层序遍历

参考链接7.2 二叉树遍历 - Hello 算法 (hello-algo.com)

层序遍历本质上属于广度优先遍历,也称广度优先搜索,

BFS通常借助队列的先入先出的特性实现

参考链接102. 二叉树的层序遍历 - 力扣(LeetCode)

像这种较为固定思路的算法(层序遍历),理解之后建议背诵复现

怎么样能按照"层"来打印二叉树?

  1. 按层打印,从上至下,是二叉树的广度优先搜索(BFS),使用队列实现
  2. 将每一层打印在一行,并将下一行全部加入到队列中;循环直至queue为空
java 复制代码
class Solution {
    public List<List<Integer>> levelOrder(TreeNode root) {
        Queue<TreeNode> queue = new LinkedList<>();
        List<List<Integer>> res = new ArrayList<>();
        if (root != null) queue.add(root);
        while (!queue.isEmpty()) {
            List<Integer> tmp = new ArrayList<>();
            for(int i = queue.size(); i > 0; i--) {
                TreeNode node = queue.poll();
                tmp.add(node.val);
                if (node.left != null) queue.add(node.left);
                if (node.right != null) queue.add(node.right);
            }
            res.add(tmp);
        }
        return res;
    }
}

对照着理解

二、翻转二叉树

递归翻转

递归三要素参考链接2.2 迭代与递归 - Hello 算法 (hello-algo.com)

  1. 终止条件:用于决定什么时候由"递"转"归"。
  2. 递归调用:对应"递",函数调用自身,通常输入更小或更简化的参数。
  3. 返回结果:对应"归",将当前递归层级的结果返回至上一层。
java 复制代码
class Solution {
    public TreeNode invertTree(TreeNode root) {
        //终止条件
        if (root == null) return null;
        TreeNode tmp = root.left;
        //递归条件1
        root.left = invertTree(root.right);
        //递归条件2
        root.right = invertTree(tmp);
        //返回结果
        return root;
    }
}
三、对称二叉树

这题乍一看挺唬人,节点数量越多越难处理

参考链接101. 对称二叉树 - 力扣(LeetCode)

理解 树无论多少节点 最小逻辑处理单元 都是下图 理解该题就没有问题

java 复制代码
class Solution {
    public boolean isSymmetric(TreeNode root) {
        return root == null || recur(root.left, root.right);
    }
    boolean recur(TreeNode L, TreeNode R) {
        if (L == null && R == null) return true;
        if (L == null || R == null || L.val != R.val) return false;
        return recur(L.left, R.right) && recur(L.right, R.left);
    }
}
四、其实反反复复考的还是DFS前中后序,BFS层序遍历的理解
相关推荐
邪修king34 分钟前
Re:Linux 系统篇(三十五):进程间通信Chapter2:从匿名管道到进程池:Linux 进程间通信实战(深度理解「先描述,再组织」)
java·linux·运维
拆房老料1 小时前
【第四部分:Agentic 智能体设计模式】16. 一个 Prompt 搞不定复杂任务?试试 Prompt Chaining
java·前端·人工智能·设计模式·prompt
张张123y2 小时前
后端第十四课:Agent 记忆系统(让 Agent 记住上下文和用户,跨会话不健忘)
java·大数据·人工智能·python·agent·记忆
曹牧6 小时前
C#:空合并运算符
java·前端·数据库
布吉岛的石头7 小时前
Java 程序员第 50 阶段2:预训练的目标函数:自回归语言建模本质
java·开发语言·人工智能·深度学习·回归·transformer
golang学习记7 小时前
IDEA 2026年的玩法已经完全不同
java·ide·intellij-idea
紧跟先前的步伐7 小时前
Go AI Agent 实战 05|Temperature 与生成参数:让模型输出可控
java·人工智能·golang
金銀銅鐵7 小时前
[Java] 展示添加元素时 ArrayList 的内部变化
java·后端·ai编程
斌糖雪梨8 小时前
spring auth 核心流程详解
java·后端·spring
罗湖老棍子9 小时前
【例 1】Sightseeing Trip(信息学奥赛一本通- P1494)(洛谷-P10927)
数据结构·算法·图论·最短路·floyd·最小环