题解 | #求二叉树的层序遍历#
求二叉树的层序遍历
https://www.nowcoder.com/practice/04a5560e43e24e9db4595865dc9c63a3
在传统二叉树节点遍历的基础上,将每次处理一个节点,改为每次处理一层的节点,所以需要把节点栈中的节点改为节点数组列表
import java.util.*;
/*
* public class TreeNode {
* int val = 0;
* TreeNode left = null;
* TreeNode right = null;
* }
*/
public class Solution {
/**
*
* @param root TreeNode类
* @return int整型ArrayList<ArrayList<>>
*/
public ArrayList<ArrayList<Integer>> levelOrder (TreeNode root) {
// out0,out是用来返回节点值的数组列表
ArrayList<ArrayList<Integer>> out = new ArrayList<>();
ArrayList<Integer> out0 = new ArrayList<>();
if (root == null) {//处理root为空的特殊场景
return out;
} else {
Stack<ArrayList<TreeNode>> node = new Stack<>();//创建栈,存放某一层的节点
ArrayList<TreeNode> rootal = new ArrayList<>();
rootal.add(root);
node.add(rootal);//把根节点加入栈中
while (!node.isEmpty()) {
ArrayList<TreeNode> tempnodes = node.pop();//弹出当前要处理的这一层节点列表
ArrayList<TreeNode> temps = new ArrayList<>();//这个用来存放已弹出的这一层节点的所有下层节点
ArrayList<Integer> out0temp = new ArrayList<>();//这个用来存放当前弹出这层节点的所有val
//for循环逐个处理已弹出的这层节点们
for (int i = 0; i < tempnodes.size(); i++) {
out0temp.add(tempnodes.get(i).val);//将每个节点的值加入要返回的值列表中
if (tempnodes.get(i).left != null) {//获取左节点
temps.add(tempnodes.get(i).left);
}
if (tempnodes.get(i).right != null) {//获取右节点
temps.add(tempnodes.get(i).right);
}
}
if (!temps.isEmpty()) {//若临时节点列表不为空,则将其加入栈以备下次弹出处理
node.push(new ArrayList<>(temps));
}
out.add(new ArrayList<>(out0temp));//将节点值列表加入返回数组中
}
return out;
}
}
}