从底向上层次遍历二叉树

2014-11-24 01:39:55 · 作者: · 浏览: 1

题目原型:

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; }