算法通关村第六村-白银挑战树的层序遍历

大家好我是苏麟 , 今天说说数的层序遍历 .

层次遍历简介

广度优先在面试里出现的频率非常高,整体属于简单题,但是很多人面试遇到时就直接放弃了,实在可惜。我们本章就集中研究一下到底难在哪里。

广度优先又叫层次遍历,基本过程如下 :

层次遍历就是从根节点开始,先访问根节点下面一层全部元素,再访问之后的层次,类似金字塔一样一层层访问。我们可以看到这里就是从左到右一层一层的去遍历二叉树,先访问3,之后访问3的左右子孩子5和4,之后分别访问5 和4的左右子孩子[7,6]和[9],最后得到结果[3,5,4,7,6,9]。

这里的问题是怎么将遍历过的元素的子孩子保存一下呢,使用队列来存储能完美解决上述问题,例如上面的图中:

java 复制代码
首先3入队。
然后3出队,之后将3的左右子孩子5和4 保存到队列中。
之后5出队,将5的左右子孩子7和6入队
之后4出队,将4的右子孩子9入队。
之后 7,6,9分别出队,此时都是叶子结点,只出队就行了

该过程不复杂 .

基本的层次遍历

最简单的层次遍历

我们先看最简单的情况,仅仅遍历并输出全部元素,如下 :

上面的二叉树应输出结果 [3,5,4,7,6,9],方法上面已经图示了,这里看一下怎么代码实现 ?

java 复制代码
List<Integer> simpleTree(TreeNode treeNode){
    //空则返回
    if(treeNode == null){
        return new ArrayList<>();
    }

    //存放数字
    List<Ineteger> list = new ArrayList<>();

    //存放节点
    Queue<TreeNode> queue = new LinkedList<>();
    queue.add(treeNode);

    while(queue.size() > 0){
        TreeNode temp = queue.remove();
        list.add(temp.val);
        
        if(temp.left != null){
            queue.add(temp.left);
        }
        if(temp.left != null){
            queue.add(temp.right);
        }
    }

    return list;
}

根据树的结构可以看到,一个结点在一层访问之后,其子孩子都是在下层按照FIFO的顺序处理的,因此队列就是一个缓存的作用。

这期就到这里 , 下一关见!

相关推荐
王嘉俊925几秒前
设计模式--适配器模式:优雅解决接口不兼容问题
java·设计模式·适配器模式
王嘉俊9252 分钟前
设计模式--组合模式:统一处理树形结构的优雅设计
java·设计模式·组合模式
道19939 分钟前
50 台小型无人车与50套穿戴终端 5 公里范围内通信组网方案深度研究
java·后端·struts
迎風吹頭髮15 分钟前
UNIX下C语言编程与实践35-UNIX 守护进程编写:后台执行、脱离终端、清除掩码与信号处理
java·c语言·unix
杨小码不BUG28 分钟前
蛇形舞动:矩阵填充的艺术与算法(洛谷P5731)
c++·算法·矩阵·csp-j/s·循环控制
光军oi31 分钟前
全栈开发杂谈————JAVA微服务全套技术栈详解
java·开发语言·微服务
帮帮志31 分钟前
目录【系列文章目录】-(关于帮帮志,关于作者)
java·开发语言·python·链表·交互
聪明的笨猪猪32 分钟前
Java Spring “MVC ”面试清单(含超通俗生活案例与深度理解)
java·经验分享·笔记·面试
MicroTech202538 分钟前
微算法科技(NASDAQ:MLGO)开发延迟和隐私感知卷积神经网络分布式推理,助力可靠人工智能系统技术
人工智能·科技·算法
Boop_wu2 小时前
[数据结构] Map和Set
java·数据结构·算法