import java.util.*;
/*
* public class TreeNode {
* int val = 0;
* TreeNode left = null;
* TreeNode right = null;
* public TreeNode(int val) {
* this.val = val;
* }
* }
*/
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param root TreeNode类
* @return int整型ArrayList<ArrayList<>>
*/
public ArrayList<ArrayList<Integer>> levelOrder (TreeNode root) {
// write code here
// 解题思路:
// 1、采用递归思想
// 2、层序遍历也就意味着把每层的节点找到,需要找到每层的节点,就需要知道所有上层的父节点
// 因此把所有上层父节点放在一个集合中,找子节点的时候,就通过遍历父节点的集合
// 然后不断递归子节点集合,只到没有子节点
if (root == null) {
return new ArrayList<>();
}
ArrayList<ArrayList<TreeNode>> arrayList = new ArrayList<>();
ArrayList<TreeNode> list = new ArrayList<>();
arrayList.add(list);
list.add(root);
ceng( list, arrayList);
ArrayList<ArrayList<Integer>> intArrayList = new ArrayList<>();
arrayList.forEach(array-> {
ArrayList<Integer> intList = new ArrayList<>();
array.forEach(a->{
intList.add(a.val);
});
intArrayList.add(intList);
});
return intArrayList;
}
private void ceng(ArrayList<TreeNode> list,
ArrayList<ArrayList<TreeNode>> arrayList) {
ArrayList<TreeNode> subList = new ArrayList<>();
if (list == null || list.size() == 0) {
return ;
}
list.forEach(l-> {
if (l.left != null) {
subList.add(l.left);
}
if (l.right != null) {
subList.add(l.right);
}
});
if (subList.size() > 0) {
arrayList.add(subList);
}
ceng(subList, arrayList);
}
}