BFS 广度优先搜索 :【迭代思想】
最基础题型 : 从上至下打印二叉树 ,need借助队列来实现(先进先出)
如上图的三道题
第一道 : 最基本的打印 ,借助队列 ,每次从队列里弹出的元素 ,将其收集到最终返回的结果里,并记录它的左右子树 !
第二道 : 在第一道的基础上有所改进 ,需要你按层次返回打印结果 ,即返回一个二维数组 ,其中每层的节点单独组成一个数组 ,就需要用上 for 循环 ,刚好每次进行 while 循环时 ,队列中元素的个数就是该层次的节点个数 ,所以可以用 for循环来把每个层次的节点组成数组。
第三道(Z字形打印) :
看着有点难度 ,其实很简单 ,就是在第二道的基础上(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);
}
}