private void bfsTravel(TreeNode root, int level, List<List<Integer>> result){
    	
    	Queue<TreeNode> maintain = new LinkedList<TreeNode>();
    	Queue<TreeNode> visited  = new LinkedList<TreeNode>();
    	List<Integer> list = null;
    	TreeNode tmp = null;
    	
    	maintain.offer(root);
    	
    	while(!maintain.isEmpty()){
    		
    		list = new ArrayList<Integer>();
    		
    		//get out from maintain
    		while(!maintain.isEmpty()){
    			list.add(maintain.peek().val);
    			
    			visited.offer(maintain.poll());
    		}
    		
    		result.add(list);
    		
    		//add sub-node to maintain
    		while(!visited.isEmpty()){
    			tmp = visited.poll();
    			
    			if(tmp.left  != null) maintain.offer(tmp.left);
    			if(tmp.right != null) maintain.offer(tmp.right);
    		}
    		
    	}
    }