import java.util.*;
/*
* public class TreeNode {
* int val = 0;
* TreeNode left = null;
* TreeNode right = null;
* }
*/
public class Solution {
/**
*
* @param root TreeNode类
* @return int整型ArrayList>
*/
public ArrayList> levelOrder (TreeNode root) {
// write code here
Queue que = new ArrayDeque();
if(root != null){
que.add(root);
}
ArrayList> res = new ArrayList();
while(!que.isEmpty()){
ArrayList list = new ArrayList();
// 遍历队列将其中的元素加入数组(层序遍历)
int n = que.size();
for(int i = 0; i < n; i++){
TreeNode node = que.poll();
list.add(node.val);
// 将当前节点的左右孩子节点加入队列
if(node.left != null){
que.add(node.left);
}
if(node.right != null){
que.add(node.right);
}
}
// 将每层的元素以子数组形式加入新的数组
res.add(list);
}
return res;
}
}经典层序遍历,运用队列存储每层节点遍历出队加入队列用于输出返回值;
同时将当前遍历节点的左右孩子节点值加入队列(因为队列的特性是先进先出且遍历次数是上一次存储的队列长度,因此这里将新的节点加入队列并不会影响遍历);
在完成遍历后如果队列不为空(下一层存在孩子节点)更新队列长度再次遍历;

京公网安备 11010502036488号