• 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;
        }
    }
  • 相关阅读:
    算算百度云的总成本
    iCloud 包括文稿与数据、日历、提醒事项、 通讯录、备忘录、Safari书签
    娄师德的低调
    我必须创业,否则那5个月的工资谁来发给我
    完整的struts.xml文件骨架
    从程序员的角度谈创业三年
    Delphi 获取Internet缓存文件 -- FindFirstUrlCacheEntry FindNextUrlCacheEntry
    没有别人聪明不可怕,可怕的是别人比你聪明也比你勤奋(活着总要为自己负责,而且首先是对自己的时间负责)
    光思想对是没有用的
    Mac与Linux的一个巨大不同
  • 原文地址:https://www.cnblogs.com/RazerLu/p/3552466.html
Copyright © 2020-2023  润新知