层序遍历及其应用

我们先看一道问题,将一棵树按照层序遍历将他列出来,如下图所示:

我们想一下,按照层序遍历的顺序应该是  1243567  。按照这个设想,我给大家讲解一下这个整体过程。

层序遍历介绍

层序遍历就是将树放入队列中,按照“进父带子”的规则,依次将树里的数据遍历一遍。

层序遍历的过程演示

我们将用图的形式将层序遍历的过程展示出来,那么我们就用上面的那个树为例。过程如下:

 1这个父节点出来就会带进去2和4这两个子节点。

 就得出顺序为1 2 4 3 5 6 7  ,就是我们想要的答案,所以这就是层序遍历,你懂了吗?

我们看一下完整代码

判断是否为完全二叉树(层序遍历的应用)

什么是完全二叉树,我们前面讲过,例如

这就是一个完全二叉树,除了叶子结点,其他的都是满的,而且叶子节点必须全部都是连续的,我们应该怎么去判断这时完全二叉树呢?我们就不能像判断满二叉树一样用节点个数去判断完全二叉树,因为完全二叉树的最后一排必须是连续的,这是个数判断不出来的。上面我也写了是层序遍历的应用,那就是用层序遍历,有一个很巧妙的办法,我们先说方法,等下用图来和大家说具体为什么,怎么做的。

和层序遍历不同的是我们必须将空也放入队列里面去,当我们带出来的那个是空时,就检查队列里面有没有非空,如果有非空,那么就不是完全二叉树,如果没有,那就是完全二叉树。

我们发现取出来的是N,所以就可以检索队列里是否含有非空,显而易见,这个队列里没有非空,那他就是一个完全二叉树。但是很多人就会问,想这个情况能不能判断出是不是完全二叉树

大家可以按照我上面说的方法,判断一下,答案是不是完全二叉树,我们带出来的第一个空是3的左孩子,当时我们队列里面有7 5 6 的子节点,但是7的子节点有6这个非空。所以这个不是完全二叉树。是不是很奇妙?

 我们看一下完整代码

  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值