题解 | #求二叉树的层序遍历#
求二叉树的层序遍历
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; } } }