2
public List<List<Integer>> levelOrder(TreeNode root) {3
List<List<Integer>> result = new ArrayList<>();4
if (root == null) return result;5
List<Integer> rootList = new ArrayList<>();6
rootList.add(root.val);8
levelOrder(root, 1, result);12
private void levelOrder(TreeNode root, int level, List<List<Integer>> result) {13
if (root == null) return;14
List<Integer> children = exploreChildren(root);15
if (!children.isEmpty()) {16
if (level < result.size()) result.get(level).addAll(children);17
else result.add(children);19
levelOrder(root.left, level + 1, result);20
levelOrder(root.right, level + 1, result);23
private List<Integer> exploreChildren(TreeNode root) {24
List<Integer> children = new ArrayList<>();25
if (root.left != null) children.add(root.left.val);26
if (root.right != null) children.add(root.right.val);