题解 | #求二叉树的层序遍历#
求二叉树的层序遍历
http://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> */ 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; } }
经典层序遍历,运用队列存储每层节点遍历出队加入队列用于输出返回值;
同时将当前遍历节点的左右孩子节点值加入队列(因为队列的特性是先进先出且遍历次数是上一次存储的队列长度,因此这里将新的节点加入队列并不会影响遍历);
在完成遍历后如果队列不为空(下一层存在孩子节点)更新队列长度再次遍历;