题目原型:
Given a binary tree, return the bottom-up level order traversal of its nodes' values. (ie, from left to right, level by level from leaf to root).
For example:
Given binary tree {3,9,20,#,#,15,7},
3
/ \
9 20
/ \
15 7
return its bottom-up level order traversal as:
[ [15,7] [9,20], [3], ]基本思路:
由于是从底向上,所以用到了栈。
public ArrayList> levelOrderBottom(TreeNode root) { Stack > stack = new Stack >(); ArrayList > list = new ArrayList >(); ArrayList nodeSet = new ArrayList (); ArrayList tmp ; ArrayList numSet ; if(root!=null) { nodeSet.add(root); while(nodeSet.size()>0) { tmp = new ArrayList (); numSet = new ArrayList (); //添加到stack中 for(TreeNode tn : nodeSet) numSet.add(tn.val); //添加到stack中 stack.push(numSet); //求下一层的节点 for(TreeNode it : nodeSet) { if(it.left!=null) tmp.add(it.left); if(it.right!=null) tmp.add(it.right); } nodeSet = tmp; } //添加到list中 while(stack.size()>0) { ArrayList rs = stack.pop(); list.add(rs); } } return list; }