n叉树的层序遍历
我想到n叉树的层序遍历是因为我想输出看看自己写的trieTree对不对,然后发现自己不会写层序遍历。果然是过程产生需求啊。
n叉树就不赘述了,直接上代码。
class Solution {
List<List<Integer>> res = new ArrayList<List<Integer>>();
public List<List<Integer>> levelOrder(Node root) {
if(root==null)return res;
List<Integer>list=new ArrayList(); //每一层存储用list
Queue<Node>queue=new LinkedList();
queue.add(root);
int size=queue.size();
while(!queue.isEmpty()){
Node t=queue.poll();
list.add(t.val);
for(Node node:t.children){
queue.add(node);
}
size--;
if(size==0){//该层遍历结束
size=queue.size();
res.add(list);
list=new ArrayList();
}
}
return res;
}
}
这里面用list存储了每一层的数据。size的大小意味着这层叶节点是否全部遍历过,如果size=0,那么就说明该遍历下一层了,同时把list清空,方便下一层重新存入数据。
n层遍历和二叉树n层遍历类似,都是用队列存储数据。
二叉树层序遍历原理:
拿二叉树举例,
第一步,节点1入队
queue:1
第二步,节点1的孩子入队,同时1出队
queue:2 3
第三步,2出队,2的孩子4 5入队
queue:3 4 5
第四步,3出队,3的孩子6入队
queue:4 5 6
第五步,4出队,4没有孩子能入队
queue:5 6
第五步,5出队,与第四步同理
queue:6
最后,6出队,队列为空