描述:
给出一棵二叉树,返回其节点值从底向上的层次序遍历(按从叶节点所在层到根节点所在的层遍历,然后逐层从左往右遍历)
样例:
Java代码:
给出一棵二叉树 {3,9,20,#,#,15,7}
,
3 / \ 9 20 / \ 15 7
按照从下往上的层次遍历为:
[ [15,7], [9,20], [3] ]
/**
* Definition of TreeNode:
* public class TreeNode {
* public int val;
* public TreeNode left, right;
* public TreeNode(int val) {
* this.val = val;
* this.left = this.right = null;
* }
* }
*/
public class Solution {
/**
* @param root: The root of binary tree.
* @return: buttom-up level order a list of lists of integer
*/
public ArrayList<ArrayList<Integer>> levelOrderBottom(TreeNode root) {
ArrayList<ArrayList<Integer>> retList = new ArrayList<ArrayList<Integer>>();
ArrayList<Integer> levelList = new ArrayList<Integer>();
Queue<TreeNode> queue = new LinkedList<TreeNode>();
boolean flag = false;//每层以null为分割
if(root == null){
return retList;
}
queue.add(root);
queue.add(null);
while(!queue.isEmpty()){
TreeNode curNode = queue.poll();
if(curNode == null){
if(!levelList.isEmpty()){
retList.add(0, levelList);
}
levelList = new ArrayList<Integer>();
flag = true;
continue;
}
if(flag){
queue.add(null);
flag = false;
}
levelList.add(curNode.val);
if(curNode.left != null){
queue.add(curNode.left);
}
if(curNode.right != null){
queue.add(curNode.right);
}
}
return retList;
}
}