题目原型:
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<ArrayList<Integer>> levelOrderBottom(TreeNode root)
{
Stack<ArrayList<Integer>> stack = new Stack<ArrayList<Integer>>();
ArrayList<ArrayList<Integer>> list = new ArrayList<ArrayList<Integer>>();
ArrayList<TreeNode> nodeSet = new ArrayList<TreeNode>();
ArrayList<TreeNode> tmp ;
ArrayList<Integer> numSet ;
if(root!=null)
{
nodeSet.add(root);
while(nodeSet.size()>0)
{
tmp = new ArrayList<TreeNode>();
numSet = new ArrayList<Integer>();
//添加到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<Integer> rs = stack.pop();
list.add(rs);
}
}
return list;
}