/**
* Definition for binary tree
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
public class Solution {
public ArrayList<ArrayList<Integer>> levelOrderBottom(TreeNode root) {
LinkedList<ArrayList<Integer>> res = new LinkedList<ArrayList<Integer>> ();
ArrayList<ArrayList<Integer>> res2 = new ArrayList<ArrayList<Integer>> ();
if (root==null) return res2;
ArrayList<Integer> level = new ArrayList<Integer> ();
int oldCnt = 1;
int newCnt = 1;
LinkedList<TreeNode> queue = new LinkedList<TreeNode> ();
queue.add(root);
while (!queue.isEmpty()) {
oldCnt = newCnt;
newCnt = 0;
for (int i=0; i<oldCnt; i++) {
TreeNode n = queue.removeFirst();
if (n.left!=null) {
queue.add(n.left);
newCnt++;
}
if (n.right!=null) {
queue.add(n.right);
newCnt++;
}
level.add(n.val);
}
res.addFirst((ArrayList<Integer>) level.clone());
level.clear();
}
for (ArrayList<Integer> list: res) res2.add(list);
return res2;
}
}
similar to Q 31. 但是需要把新的放在前面,所以先用linkedlist保存temp,每次插到最前边,再把它们放入arraylist.
回复删除