二叉树层序遍历-12.7(day13)

层序遍历应用的是图中的广度优先遍历,不过效果是类似的:从树的根节点开始,从上到下、从左到右依次遍历每层的元素。

基础思路:使用队列来辅助遍历;当二叉树不为空时,将二叉树的根节点加入队列中;记录队列长度size,队列长度就是每层拥有的节点数(没理解的话请继续向下看),用来辅助我们进行循环;在这重复一下队列的性质:先进先出,元素只能加到队尾,只能从队头取出;当我们每取出一个节点,首先将该节点的值加入到临时数组中,然后判断该节点的左右节点是否存在,存在的话就再加入到队列中,因此,当上一层的节点遍历结束后,队列中剩余的所有元素都是本层节点,队列长度size就是本层所有结点的数量。当size为0时,临时数组中的所有元素就是所有本层节点的值。

基础代码如下:

let levelOrder = function(root,arr=[]){
    if(root){//判断该二叉树是否为空
        let queue = [root]//定义一个队列,使用队列辅助遍历
        while(queue.length){//当队列中没有元素的时候停止遍历
            let size = queue.length//定义每层的节点个数
            let midArr= []//创建一个中间数组
            while(size--){//每拿出一个节点,size就减一
                let m = queue.shift()//拿出的节点
                midArr.push(m.val)//将拿出的节点的值加入中间数组中
                if(m.left)queue.push(m.left)//判断拿出节点的左节点是否为空,不为空则加入队列
                if(m.right)queue.push(m.right)//作用同上,判断右节点
            }
            arr.push(midArr)//当每层的遍历结束后,将中间数组加入总数组中
        }
    }
    return arr//返回总数组
}

通过这些基础代码,我们可以解决很多关于二叉树的问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值