按要求层序遍历二叉树
-
层序遍历BFS一般都是需要用
队列
来辅助实现,不同于深度优先DFS,BFS一般是不用递归的。递归会导致越来越深入,不符合(广度优先Breadth-First-Search) -
这种打印要求区分每一层而不是简单的全部打出来,所以要作出每层的区分,这一点怎么做到呢?
首先我们先入队的是头节点,队列长度为1,队列不为空进入while循环,new出这一层的数组,长度是目前队列的长度,目前队列依次出队,把值加入数组,把出队的节点的左右节点都加入队列,此时我们加入了3这个头节点的左右节点9和20到队列里,把3这个头节点的值加入数组了,
-
疑问数组初始化的时候可以不指明长度吗?
-
然后我们又因为队列不为空进入while循环,new出第二层的数组,长度是当前队列长度2,for循环循环两次,队列元素9节点出队,把值存到数组把孩子加入队列,队列元素20节点出队,把值存到数组把孩子加入队列,此时第二层数组装配完毕,队列里装着20的两个子节点
-
我们又因为队列不为