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. yum lock 解决方法

    方法一: # ps aux | grep yum # kill -9 pid 方法二:可以通过执行rm -rf /var/run/yum.pid 来强行解除锁定,然后你的yum就可以运行了 解释: [ ...

  2. 阿里巴巴产品实习生N天

    时间貌似有些太遥远,已经没办法从刚来时的日子一天一天数.连上内网打开内外.看到45天,每一次不经意的邂逅总会让人认为奇妙而微妙,每一次的巧合总会让人认为是神在显灵(但愿天津安好,这里也曾在我心中滋润过 ...

  3. 九度OJ 1208:10进制 VS 2进制 (进制转换)

    时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:2040 解决:612 题目描述: 对于一个十进制数A,将A转换为二进制数,然后按位逆序排列,再转换为十进制数B,我们乘B为A的二进制逆序数. ...

  4. UITableview刷新时界面“乱跑”现象

    Self-Sizing在iOS11下是默认开启的,Headers, footers, and cells都默认开启Self-Sizing,所有estimated 高度默认值从iOS11之前的 0 改变 ...

  5. 【windows】远程桌面报错:由于CredSSP加密Oracle修正

    对于windows家庭版用户,无法打开gepdit.msc需要手动修改注册表 创建红色部分目录 [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Curre ...

  6. mysql 自连接查询数据

    今天项目BOSS提了个sql语句需求,我听得稀里糊涂,没办法,一步步讨论.实践,最终搞定. 先上建表语句: /* Navicat MySQL Data Transfer Source Server : ...

  7. R语言数据管理(四):数据导出

    与read.*函数对应,导出函数为write.*函数. 比较常见的为write.csv和write.table. 一般格式: setwd("D:\\") write.table(y ...

  8. Linux系统BTC挖矿傻瓜教程

    [Linux系统BTC/比特币矿池挖矿方案一]cgminer矿池挖矿程序(Linux系统 比特币(BTC) 矿池挖矿/采矿/造币)cgminer矿池挖矿程序[查看这里有没有最新版]http://ck. ...

  9. cache:annotation-driven" 的前缀 "cache" 未绑定

    问题: Caused by: org.springframework.beans.factory.xml.XmlBeanDefinitionStoreException: Line 29 in XML ...

  10. iOS swift 语句只能写在函数体内

    1. 语句只能在函数体内: eg    因为我写在playground里面没报错  我直接放在这个位置就报错了 在这个.swift 文件里面 print 应该写在func 等方法(函数)里面 其他语句 ...