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;
}
}


京公网安备 11010502036488号