Binary Tree Level Order Traversal II——LeetCode
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]
]
题目大意为,按照层次逆序输出每一层的节点,很明显用层次遍历即可,之前在Minimum Depth of Binary Tree ——LeetCode这个题目中,也用到了层次遍历,下面先看我写的,也是用upRow,downRow,来记录上一层、下一层的节点数量,upRow--为0时,一层遍历完了。
  public List<List<Integer>> levelOrderBottom(TreeNode root) {
        List<Integer> level = new LinkedList<>();
        List<List<Integer>> res = new LinkedList<>();
        if (root == null)
            return res;
        ArrayDeque<TreeNode> queue = new ArrayDeque<>();
        queue.add(root);
        int upRow = 1, downRow = 0;
        while (!queue.isEmpty()) {
            TreeNode node = queue.getFirst();
            queue.removeFirst();
            if (node.left != null) {
                queue.add(node.left);
                downRow++;
            }
            if (node.right != null) {
                queue.add(node.right);
                downRow++;
            }
            upRow--;
            level.add(node.val);
            if (upRow == 0) {
                res.add(0, level);
                level = new LinkedList<>();
                upRow = downRow;
                downRow=0;
            }
        }
        return res;
    }
后来发现一种更巧妙的解,就是利用queue的size(),根本不用记录这两个值。
Talk is cheap>>
 public List<List<Integer>> levelOrderBottom2(TreeNode root) {
        Queue<TreeNode> queue = new LinkedList<>();
        List<List<Integer>> wrapList = new LinkedList<>();
        if (root == null) return wrapList;
        queue.offer(root);
        while (!queue.isEmpty()) {
            int levelNum = queue.size();
            List<Integer> subList = new LinkedList<>();
       //把一层元素全部取出 
            for (int i = 0; i < levelNum; i++) {
                TreeNode node = queue.poll();//取出队列第一个元素
                if (node.left != null) queue.offer(node.left);
                if (node.right != null) queue.offer(node.right);
                subList.add(node.val);
            }
            wrapList.add(0, subList);
        }
        return wrapList;
    }
Binary Tree Level Order Traversal II——LeetCode的更多相关文章
- Binary Tree Level Order Traversal II [LeetCode]
		Given a binary tree, return the bottom-up level order traversal of its nodes' values. (ie, from left ... 
- Binary Tree Level Order Traversal II leetcode java
		题目: Given a binary tree, return the bottom-up level order traversal of its nodes' values. (ie, from ... 
- Binary Tree Level Order Traversal II --leetcode C++
		考察点 广度优先遍历--层次遍历 STL内容器的用法 广度优先遍历的时候,首先应该想到的就是借助于队列.还需要在遍历下一层之前保存当前层节点的数量 代码很简单: class Solution { pu ... 
- LeetCode之“树”:Binary Tree Level Order Traversal && Binary Tree Level Order Traversal II
		Binary Tree Level Order Traversal 题目链接 题目要求: Given a binary tree, return the level order traversal o ... 
- 【LeetCode】107. Binary Tree Level Order Traversal II (2 solutions)
		Binary Tree Level Order Traversal II Given a binary tree, return the bottom-up level order traversal ... 
- 35. Binary Tree Level Order Traversal  &&  Binary Tree Level Order Traversal II
		Binary Tree Level Order Traversal OJ: https://oj.leetcode.com/problems/binary-tree-level-order-trave ... 
- LeetCode_107. Binary Tree Level Order Traversal II
		107. Binary Tree Level Order Traversal II Easy Given a binary tree, return the bottom-up level order ... 
- Binary Tree Level Order Traversal,Binary Tree Level Order Traversal II
		Binary Tree Level Order Traversal Total Accepted: 79463 Total Submissions: 259292 Difficulty: Easy G ... 
- 102/107. Binary Tree Level Order Traversal/II
		原文题目: 102. Binary Tree Level Order Traversal 107. Binary Tree Level Order Traversal II 读题: 102. 层序遍历 ... 
随机推荐
- Linux中date命令的各种实用方法--转载
			在linux环境中,不管是编程还是其他维护,时间是必不可少的,也经常会用到时间的运算,自己也曾经为时间的各种表示方法和如何修改时间而困惑,熟练运用date命令来表示自己想要表示的时间,肯定可以给自己的 ... 
- 使用MiniProfiler调试Asp.net Mvc性能
			使用nuget添加MiniProfiler.EF组件 在Global文件中配置MiniProfiler protected void Application_Start() { AreaRegistr ... 
- 开始学习编程了…… 2015年九月七日 …… 31岁的Me.
			给自己下的命令:做今天开始认认真真地开始学习编程,一年后的今天一定要找到一份编程的工作. 为什么要学编程?:因为不想回以前的圈子,“创业”快三年什么都给“创”没了,咳……,不过呢,倒是领略到编程能带来 ... 
- MiniProfiler.EF6监控调试MVC5和EF6的性能
			转自:蓝狐学MVC教程 以前开发Webform的时候可以开启trace来跟踪页面事件,这对于诊断程序的性能是有很大的帮助的,起到事半功倍的作用,今天我就来谈用mvc开 发项目的调试和性能监控.EF框架 ... 
- Wpf 数据绑定实例2
			1.简单DataContext绑定 //绑定对象 label.DataContext = Process.GetCurrentProcess(); Xaml代码: <Grid> <G ... 
- C# Double类型 不四舍五入
			测试中发现Double类型需要#0.00 小数点精度为后2位,并且多余部分不需要四舍五入,直接截断 用字符串处理也可以,但是比较麻烦 这里给出一种思路: double a = 9999.999; a ... 
- Oracle10g、 Oracle11g完美共存
			Oracle10g. Oracle11g完美共存 环境描述 客户服务器上已经安装Oracle9i软件并部署多套数据库,现在客户要求安装Oracle11g软件,并且创建11g数据库, ... 
- Xcode7  通过 Single View Application 得到一个 Empty Application 工程
			方法: 创建一个 Empty Application 工程 下面还是详细的说一下通过一个 Single View Application 工程得到一个 Empty Application 工程的方法: ... 
- DOM中的node与element的区别
			先看document的两个常见method. document.createTextNode Constructor: Text document.createElement Constructor: ... 
- python 文件系统
