6.28 BFS打印二叉树

81 阅读1分钟

BFS 广度优先搜索 :【迭代思想】

最基础题型 : 从上至下打印二叉树 ,need借助队列来实现(先进先出)

0354.png

如上图的三道题

第一道 : 最基本的打印 ,借助队列 ,每次从队列里弹出的元素 ,将其收集到最终返回的结果里,并记录它的左右子树 !

第二道 : 在第一道的基础上有所改进 ,需要你按层次返回打印结果 ,即返回一个二维数组 ,其中每层的节点单独组成一个数组 ,就需要用上 for 循环 ,刚好每次进行 while 循环时 ,队列中元素的个数就是该层次的节点个数 ,所以可以用 for循环来把每个层次的节点组成数组。

第三道(Z字形打印) :

0355.png

看着有点难度 ,其实很简单 ,就是在第二道的基础上(for循环什么都不用变) ,每个层级的节点计入每个层次数组时 ,单独在for循环外面来计入 ,直接将 queue里的元素 从前至后(从后至前)复制到数组中即可,注意 : 此操作要在for循环前面进行。代码如下 :

while(queue.length)
    {
        var length = queue.length;
        temp = [];
        if(flag===0)
        {
            for(var i = 0 ; i < length ; i++)
            {
                temp.push(queue[i].val);
            }
            flag = 1;
        }
        else if(flag===1)
        {
            for(var i = length-1 ; i >=0 ; i--)
            {
                temp.push(queue[i].val);
            }
            flag = 0;
        }
        for(var i = 0 ; i < length ; i++)
        {
            var node = queue.shift();
            if(node.left) queue.push(node.left);
            if(node.right) queue.push(node.right);
        }
   }