102. Binary Tree Level Order Traversal

Given a binary tree, return the level order traversal of its nodes' values. (ie, from left to right, level by level).

For example:
Given binary tree {3,9,20,#,#,15,7},

    3
   / \
  9  20
    /  \
   15   7

 

return its level order traversal as:

[
  [3],
  [9,20],
  [15,7]
]

 

confused what "{1,#,2,3}" means? > read more on how binary tree is serialized on OJ.

---

 1. recursion

/**
 * 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>> levelOrder(TreeNode root) {
        
        ArrayList<ArrayList<Integer>> rst = new ArrayList<ArrayList<Integer>>();     
        helper(root, 0, rst);
        return rst;
        
    }
    
    
    private void helper(TreeNode node,  int level, 
            ArrayList<ArrayList<Integer>> rst){
        
        if(node == null) return;
        
        ArrayList<Integer> list = null;
        
        if(rst.size() == level){ // Base case
            list = new ArrayList<Integer>();
            list.add(node.val);
            rst.add(list);
            
        }else{
            
            list = rst.get(level);
            list.add(node.val);
        }
        
        helper(node.left, level+1, rst);
        helper(node.right, level+1, rst);
    }
}

2. Iteration

/**
 * 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>> levelOrder(TreeNode root) {
        
       
        
        ArrayList<ArrayList<Integer>> rst = new ArrayList<ArrayList<Integer>>();     
        ArrayList<Integer> curVal = new ArrayList<Integer>();
        ArrayList<TreeNode> cur = new ArrayList<TreeNode>(); 
        
        
        if(root == null)    return rst;
        
        // add root
        cur.add(root);
        curVal.add(root.val);
        
        while(!cur.isEmpty()){
            // add parent level
            rst.add(curVal);
            //go to next leve
            ArrayList<TreeNode> parents = cur;
            cur= new ArrayList<TreeNode>();
            curVal = new ArrayList<Integer>();
            
            for(TreeNode p : parents){
                
                // !!! check if null
                if(p.left != null){
                    cur.add(p.left);
                    curVal.add(p.left.val);
                }
               
                if(p.right != null){
                    cur.add(p.right);
                    curVal.add(p.right.val);
                }
            } 
        }
        
        return rst;
    }
}

 

posted @ 2013-09-22 01:36  LEDYC  阅读(177)  评论(0)    收藏  举报