题解 | #求二叉树的层序遍历#
求二叉树的层序遍历
http://www.nowcoder.com/practice/04a5560e43e24e9db4595865dc9c63a3
JAVA
思路:
1, 从根节点开始,把根节点放在list1中。
2,对这个list1中的节点遍历,分别判断其是否存在左右孩子节点,如果存在,就放在临时list2中。list2是装每一层的孩子节点的,所以在循环里面,每循环一次就new一个。
3,此时的临时list2就是装的当前层的所有孩子节点。
4,把list2 赋值给list1,
5,下次while循环就是判断list1是否是空,空代表没有下一层了。while循环结束,这里的list2只是用来当中间媒介的。
import java.util.*; /* * public class TreeNode { * int val = 0; * TreeNode left = null; * TreeNode right = null; * } */ //解法一: 数据结构用list,一层层遍历,判断每个节点是否有左右孩子。 //解法二:数据结构用队列。 public class Solution { /** * * @param root TreeNode类 * @return int整型ArrayList<arraylist<>> */ public ArrayList<arraylist<integer>> levelOrder (TreeNode root) { // write code here ArrayList<arraylist<integer>> resList= new ArrayList<>(); //必备的空节点判断 if(root == null) return resList; //声明存放每个节点的list ArrayList<treenode> nodeList= new ArrayList<>(); //1,根节点放进去 nodeList.add(root); //开始对每个节点判断是否有下层节点的操作开始 while(!nodeList.isEmpty()){ ArrayList<treenode> tempList= new ArrayList<>();//辅助list用来存每一层的节点 ArrayList<integer> dataList= new ArrayList<>();//存每个节点的数据 //2,遍历存放每个节点的list for(TreeNode node :nodeList){ dataList.add(node.val); //当前节点的数值放进去,放的是数值Int //3 if(node.left != null){ tempList.add(node.left); } if(node.right != null) { tempList.add(node.right); } } //4 nodeList = tempList; resList.add(dataList);//保存每一层的数据 } return resList; } }