zoukankan      html  css  js  c++  java
  • 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],
    ]

      解题思路和level order traversal 一样, 就是最后把输出结果反转一下

     一个queue的方法,reverse 结果

    /**
     * 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>> levelOrderBottom(TreeNode root) {
            ArrayList<ArrayList<Integer>> result = new ArrayList<ArrayList<Integer>>();
            
            if(root == null)
                return result;
                
            LinkedList<TreeNode> queue = new LinkedList<TreeNode>();
            queue.add(root);
            int nextLevelCount = 1;
            
            while(!queue.isEmpty()){
                int curLevel = nextLevelCount;
                nextLevelCount = 0;
                ArrayList<Integer> lvl = new ArrayList<Integer>();
                for(int i = 0; i < curLevel; i++){
                    TreeNode tmp = queue.poll();
                    lvl.add(tmp.val);
                    if(tmp.left != null){
                        queue.add(tmp.left);
                        nextLevelCount++;
                    }
                    if(tmp.right != null){
                        queue.add(tmp.right);
                        nextLevelCount++;
                    }
                }
                result.add(lvl);
            }
            ArrayList<ArrayList<Integer>> reverse = new ArrayList<ArrayList<Integer>>();
            for(int i = result.size()-1; i >= 0; i--){
                reverse.add(result.get(i));
            }
            return reverse;
        }
    }

     用 Stack 和 两个queue 的方法

    public class Solution {
        public ArrayList<ArrayList<Integer>> levelOrderBottom(TreeNode root) {
            ArrayList<ArrayList<Integer>> result = new ArrayList<ArrayList<Integer>>();
            if(root == null)
                return result;
            Stack<ArrayList<Integer>> stack = new Stack<ArrayList<Integer>>();
            stack = traversal(root);
            while(!stack.isEmpty())
                result.add(stack.pop());
            return result;
        }
        private Stack<ArrayList<Integer>> traversal(TreeNode root)
        {
            LinkedList<TreeNode> queue = new LinkedList<TreeNode>();
            Stack<ArrayList<Integer>> result = new Stack<ArrayList<Integer>>();
            queue.add(root);
            while(!queue.isEmpty())
            {
                ArrayList<Integer> tmp = new ArrayList<Integer>();
                LinkedList<TreeNode> tmpqueue = new LinkedList<TreeNode>();
                while(!queue.isEmpty())
                {
                    TreeNode node = queue.poll();
                    tmp.add(node.val);
                    if(node.left != null)
                        tmpqueue.add(node.left);
                    if(node.right != null)
                        tmpqueue.add(node.right);
                }
                result.add(tmp);
                queue = tmpqueue;
            }
            return result;
        }
    }
  • 相关阅读:
    Maven与Eclipse整合使用
    Maven学习总结(五)——聚合与继承【如果想一次构建多个项目模块,那我们就需要对多个项目模块进行聚合】
    Maven的核心概念:maven仅仅定义了抽象的生命周期,具体的任务都是交由插件完成的
    使用Maven构建项目---【重点需要掌握:Jetty和Maven两种项目骨架】
    Maven项目构建过程练习
    maven编码gbk的不可映射字符”解决办法
    Maven
    Spring Aop的方法执行简单模型
    2016年看过的书
    ExcelReader
  • 原文地址:https://www.cnblogs.com/RazerLu/p/3552466.html
Copyright © 2011-2022 走看看