题目要求
二叉树的遍历。
核心思想
利用队列的特性来实现二叉树的遍历。
完整代码如下
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import java.util.Queue;
/**
* 二叉树的遍历
*
*/
public class Solution {
class TreeNode {
int val;
TreeNode left;
TreeNode right;
TreeNode(int val) {
this.val = val;
}
}
public List<List<Integer>> levelOrder(TreeNode root) {
List<List<Integer>> list = new ArrayList<>();
List<Integer> tempList = new ArrayList<>();
if(root == null) {
return list;
}
Queue<TreeNode> queue = new LinkedList<>();
queue.add(root);
int toBePrint = 1;//这一层要打印的节点
int nextLevelCount = 0;
while(queue.isEmpty() == false) {
TreeNode temp = queue.poll();//出队
tempList.add(temp.val);
toBePrint--;
if(temp.left != null) {
queue.add(temp.left); //入队,先入先出
nextLevelCount++; //统计下一层节点
}
if(temp.right != null) {
queue.add(temp.right);
nextLevelCount++;
}
if(toBePrint == 0) { //当这一层节点打印完了
list.add(new ArrayList<>(tempList)); //保存结果
tempList.clear();
toBePrint = nextLevelCount; //下一层需要打印的节点
nextLevelCount = 0; //下下层节点初始值
}
}
return list;
}
}