binary-tree-level-order-traversal-ii

题目

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],
]

java代码

利用层序遍历,结合题目 [populating-next-right-pointers-in-each-node-ii(二叉树每层用指针链接)](http://blog.csdn.net/zh_ang_lei/article/details/70834048

import java.util.ArrayList;
import java.util.Collections;

public class Solution12 {
    public ArrayList<ArrayList<Integer>> levelOrderBottom(TreeNode root) {
        ArrayList<ArrayList<Integer>> result = new ArrayList<ArrayList<Integer>>();// 用来返回结果集合
        ArrayList<TreeNode> list = new ArrayList<TreeNode>();
        ArrayList<Integer> temp = new ArrayList<Integer>();
        if(root == null)
            return result;
        list.add(root);     
        while(!list.isEmpty()){
            int count = list.size();
            for(int i=0; i< count;i++){
                TreeNode node = list.remove(0);
                temp.add(node.val);
                if(node.left != null){
                    list.add(node.left);
                }
                if(node.right != null){
                    list.add(node.right);
                }
                if(i == count -1){  
                    result.add(new ArrayList<Integer>(temp));
                    temp.clear();
                }
            }           
        }
        Collections.reverse(result);
        return result;
    }

    public static void main(String[] args) {
        TreeNode root = new TreeNode(5);
        TreeNode root1 = new TreeNode(9);
        TreeNode root2 = new TreeNode(20);
        root.left = root1;
        root.right = root2;

        TreeNode root3 = new TreeNode(15);
        TreeNode root4 = new TreeNode(7);
        root2.left = root3;
        root2.right = root4;
        ArrayList<ArrayList<Integer>> result = new Solution12().levelOrderBottom(root);
        System.out.println(result);
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值