/*
方法2 : DFS
*/
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
public List<List<Integer>> levelOrder(TreeNode root) {
List<List<Integer>> resultList = new ArrayList<>();
if(root == null) return resultList;
int count = 0;
while(true) {
List<Integer> result = new ArrayList<>();
int start = 0;
helper(root, result, start, count);
if(result.size() == 0){
break;
}
resultList.add(result);
count++;
}
return resultList;
}
private void helper(TreeNode root, List<Integer> result, int start, int count) {
if(root == null) {
return;
}
if(start == count) {
result.add(root.val);
}
helper(root.left, result, start + 1, count);
helper(root.right, result, start + 1, count);
}
}
/*
方法1:BFS;
*/
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
// class Solution {
// public List<List<Integer>> levelOrder(TreeNode root) {
// List<List<Integer>> resultList = new ArrayList<>();
// if(root == null) return resultList;
// Queue<TreeNode> q = new LinkedList<TreeNode>();
// q.offer(root);
// while(!q.isEmpty()) {
// List<Integer> level = new ArrayList<>();
// int size = q.size();
// for(int i = 0; i < size; i++) {
// TreeNode temp = q.poll();
// level.add(temp.val);
// if(temp.left != null) {
// q.offer(temp.left);
// }
// if(temp.right != null) {
// q.offer(temp.right);
// }
// }
// resultList.add(level);
// }
// return resultList;
// }
// }