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

题解:

类似http://www.cnblogs.com/sunshineatnoon/p/3826613.html,无非这次是要从最后一层开始。只要在把每一层的节点加入到最终的list的时候用插入到list头的方法就可以了。不过这里学习到一种更简便的层次遍历的方法,不用记录每一层的起始节点,而是在遍历上一层的时候就记录这一层的节点个数,即统计上一层节点的孩子的总个数,这要比在遍历上一层时找到这一层的起始节点容易的多。

代码如下:

 /**
* Definition for binary tree
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
public class Solution {
public List<List<Integer>> levelOrderBottom(TreeNode root) {
List<List<Integer>> answer = new ArrayList<List<Integer>>();
Queue<TreeNode> q = new LinkedList<TreeNode>(); if(root == null)
return answer; q.offer(root);
int currNodeNum = 1; while(currNodeNum != 0){
int nextNodeNum = 0;
ArrayList<Integer> currNodeList = new ArrayList<Integer>();
while(currNodeNum != 0){
TreeNode node = q.poll(); currNodeNum--;
currNodeList.add(node.val); if(node.left != null){
q.offer(node.left);
nextNodeNum ++;
}
if(node.right != null){
q.offer(node.right);
nextNodeNum++;
} }
answer.add(0,currNodeList);
currNodeNum = nextNodeNum;
}
return answer;
}
}

上述代码中currNodeNum记录当前层节点的数目,每从队列中弹出一个节点,currNodeNum值减1,当currNodeNum值减为0,当前层次遍历结束。在遍历当前层的过程中,顺便用nextNodeNum统计下一层节点呃个数,每当当前层节点有一个左子或者右子的时候,nextNodeNum值就加1。当下一层没有节点的时候,遍历结束。

第40行代码,是将每层得到的节点list插入到answer的最前面,这样就可以满足题目bottom-up的要求了。

【leetcode刷题笔记】Binary Tree Level Order Traversal II的更多相关文章

  1. [刷题] 102 Binary Tree Level Order Traversal

    要求 对二叉树进行层序遍历 实现 返回结果为双重向量,对应树的每层元素 队列的每个元素是一个pair对,存树节点和其所在的层信息 1 Definition for a binary tree node ...

  2. LeetCode(107) Binary Tree Level Order Traversal II

    题目 Given a binary tree, return the bottom-up level order traversal of its nodes' values. (ie, from l ...

  3. LeetCode(26)-Binary Tree Level Order Traversal II

    题目: Given a binary tree, return the bottom-up level order traversal of its nodes' values. (ie, from ...

  4. [LeetCode&Python] Problem 107. Binary Tree Level Order Traversal II

    Given a binary tree, return the bottom-up level order traversal of its nodes' values. (ie, from left ...

  5. 【leetcode❤python】107. Binary Tree Level Order Traversal II

    #-*- coding: UTF-8 -*- # Definition for a binary tree node.# class TreeNode(object):#     def __init ...

  6. 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 ...

  7. [Leetcode] Binary tree level order traversal ii二叉树层次遍历

    Given a binary tree, return the bottom-up level order traversal of its nodes' values. (ie, from left ...

  8. 【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 ...

  9. 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 ...

  10. 102/107. Binary Tree Level Order Traversal/II

    原文题目: 102. Binary Tree Level Order Traversal 107. Binary Tree Level Order Traversal II 读题: 102. 层序遍历 ...

随机推荐

  1. zookeeper应用场景之配置文件同步

    p=2628">http://www.firefoxbug.net/?p=2628

  2. 使用Swoole加速Laravel(正式环境中)

    1 Laravel的速度瓶颈在哪? 1.1 已有的一些优化方法 1.1.1 laravel官方提供了一些优化laravel的优化方法 php artisan optimize php artisan ...

  3. html5+css3实现手机下拉和下拉刷新

    <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content ...

  4. IT人和普洱茶

    IT人与普洱茶 作为一个平凡的IT人,在小孩眼中我就像黑客帝国的主角一样了不起:在亲戚眼中我是在写字楼做办公室吹空调的人:在朋友眼中我就是一个会写代码.掌握高科技术的人:在女友眼中我是一个在名企工作的 ...

  5. SDOI2012 Round1 day2 象棋(chess)解题报告

    本题的难点是“移动过程中不能出现多颗棋子同时在某一格的情况”. 事实上,可以忽略此条件,因为棋子是相同的,我们可以用合法的等效方案替代一棋子越过另一棋子的情况:A.B.C三格,A能在一步走到B,B也能 ...

  6. EasyNVR无插件直播服务器软件使用详情功能 - 录像功能说明

    背景介绍 EasyNVR不仅仅拥有无插件的直播功能,更拥有对于直播录像的存储和日期检索功能: 本篇博文主要用于介绍EasyNVR的录像功能. 之前有博文介绍相关的录像功能,本篇主要为了介绍录像的新功能 ...

  7. json-lib-2.5-jdk.jar 需要依赖的jar包

    commons-lang3-3.1.jar commons-lang-2.5.jar ezmorph-1.0.6.jar commons-collections-3.2.1.jar commons-b ...

  8. Channel (Java NIO)

    [正文]netty源码死磕1.3:  Java NIO Channel 1. Java NIO Channel 1.1. Java NIO Channel的特点 和老的OIO相比,通道和NIO流(非阻 ...

  9. 【python】-- socketserver

    socketserver SocketServer服务端内部使用 IO多路复用 以及 “多线程” 和 “多进程” ,从而实现并发处理多个客户端请求.即:每个客户端请求连接到服务器时,Socket服务端 ...

  10. Python过滤

    text = "A2A"s = filter(lambda ch: ch in '0123456789', text)print int(s)