public static List<List<Integer>> levelOrderBottom(TreeNode root) {
    	List<List<Integer>> res = new ArrayList<List<Integer>>();
        List<TreeNode> stack = new ArrayList<TreeNode>();
        int start = 0;
        int end = 0;
        if (null != root) {stack.add(root);end = 1;}
        while (end > start) {
        	List<Integer> level = new ArrayList<Integer>();
        	for (int i = start; i < end; i++) {
        		TreeNode node = stack.get(i);
        		level.add(node.val);
        		if (null != node.left) {
        			stack.add(node.left);
        		}
        		if (null != node.right) {
        			stack.add(node.right);
        		}
        	}
        	res.add(0, level);
        	start = end;
        	end = stack.size();
        }
    	return res;
    }