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