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;
        }
    }
  • 相关阅读:
    通过IMM With Remote Console为服务器安装操作系统
    linux下编译安装php5.6出现 configure: error: Cannot find MySQL header files under /usr/local/mysql.
    5700交换机清除配置
    嵌入式驱动解析:从串口驱动到Linux驱动模型
    Win10自带Ubuntu子系统的安装与配置
    关于嵌入式C代码优化的几种方法
    2020软考高级系统分析师,你想知道的全在这
    libpng warning: iCCP: known incorrect sRGB profile
    pycharm中导入pygame库失败及解决办法
    pycharm中导入pygame等第三方库
  • 原文地址:https://www.cnblogs.com/RazerLu/p/3552466.html
Copyright © 2011-2022 走看看