題目描述
從上到下按層打印二叉樹,同一層結點從左至右輸出。每一層輸出一行。
Solution
- 遞歸,節點加入對應層數的list中
public class Solution {
ArrayList<ArrayList<Integer> > Print(TreeNode pRoot) {
ArrayList<ArrayList<Integer>> ret = new ArrayList<>();
depth(pRoot, 1, ret);
return ret;
}
public void depth(TreeNode root, int depth, ArrayList<ArrayList<Integer>> list) {
if (root == null) {
return;
}
if (depth > list.size()) {
list.add(new ArrayList<Integer>());
}
list.get(depth-1).add(root.val);
depth(root.left, depth+1, list);
depth(root.right, depth+1, list);
}
}
- 非遞歸,用null標記每層的開始,或用start==end標記每層的結束,end爲每層的節點數
public class Solution {
ArrayList<ArrayList<Integer> > Print(TreeNode pRoot) {
ArrayList<ArrayList<Integer>> ret = new ArrayList<>();
if (pRoot == null) {
return ret;
}
Queue<TreeNode> q = new LinkedList<>();
q.offer(null);
q.offer(pRoot);
ArrayList<Integer> list = new ArrayList<>();
while (q.size() > 1) {
TreeNode node = q.poll();
if (node == null) {
Iterator<TreeNode> iter = q.iterator();
while (iter.hasNext()) {
TreeNode temp = iter.next();
list.add(temp.val);
}
ret.add(new ArrayList<Integer>(list));
list.clear();
q.offer(null);
continue;
}
if (node.left != null) {
q.offer(node.left);
}
if (node.right != null) {
q.offer(node.right);
}
}
return ret;
}
}