107. 二叉树的层次遍历 II
107. 二叉树的层次遍历 II
题意
给定一个二叉树,返回其节点值自底向上的层次遍历。 (即按从叶子节点所在层到根节点所在的层,逐层从左向右遍历)。
解题思路
递归:利用前序遍历的思想,在递归过程中记录下结点的深度,在对应深度将结点加入到结果中;
迭代:使用两个队列是因为一个用于记录当前层的结点,另外一个则记录下一层的结点,用于后面和当前队列进行替换;
实现
class Solution(object):
def levelOrderBottom(self, root):
"""
:type root: TreeNode
:rtype: List[List[int]]
"""
if not root:
return [] # 使用两个队列是因为一个用于记录当前层的结点,另外一个则记录下一层的结点,用于后面和当前队列进行替换
# 致于为什么要使用队列,是因为需要题目要求结点的顺序是从左到右,也就是先加入的要先取出,这是队列的特性;
cur_level, tmp_level, result = [root], [], [[]]
while cur_level:
cur = cur_level.pop(0)
result[0].append(cur.val)
# 替代队列加入下一层的结点
if cur.left:
tmp_level.append(cur.left)
if cur.right:
tmp_level.append(cur.right)
# 是否需要添加新的一层
if not cur_level and tmp_level:
cur_level = tmp_level[:]
tmp_level = []
result.insert(0, [])
return result
def levelOrderBottom(self, root):
"""
递归实现
:type root: TreeNode
:rtype: List[List[int]]
"""
if not root:
return []
def helper(node, depth, res):
"""
利用前序遍历的思想
"""
if not node:
return
# 超出递归的长度表明是新的一层,则新添加数组
if depth < 0 and abs(depth) > len(res):
res.insert(0, [])
# 可以理解成每个node都能对应到树的depth
res[depth].append(node.val)
if node.left:
helper(node.left, depth-1, res)
if node.right:
helper(node.right, depth-1, res)
result = []
# 从-1开始是为了可以在第一次定位具体子数组的时候使用
helper(root, -1, result)
return result
107. 二叉树的层次遍历 II的更多相关文章
- Java实现 LeetCode 107 二叉树的层次遍历 II(二)
107. 二叉树的层次遍历 II 给定一个二叉树,返回其节点值自底向上的层次遍历. (即按从叶子节点所在层到根节点所在的层,逐层从左向右遍历) 例如: 给定二叉树 [3,9,20,null,null, ...
- LeetCode 107 ——二叉树的层次遍历 II
1. 题目 2. 解答 与 LeetCode 102 --二叉树的层次遍历 类似,我们只需要将每一层的数据倒序输出即可. 定义一个存放树中数据的向量 data,一个存放树的每一层数据的向量 level ...
- [LeetCode] 107. 二叉树的层次遍历 II
题目链接 : https://leetcode-cn.com/problems/binary-tree-level-order-traversal-ii/ 题目描述: 给定一个二叉树,返回其节点值自底 ...
- LeetCode107. 二叉树的层次遍历 II
107. 二叉树的层次遍历 II 描述 给定一个二叉树,返回其节点值自底向上的层次遍历. (即按从叶子节点所在层到根节点所在的层,逐层从左向右遍历) 示例 例如,给定二叉树: [3,9,20,null ...
- lintcode : 二叉树的层次遍历II
题目 二叉树的层次遍历 II 给出一棵二叉树,返回其节点值从底向上的层次序遍历(按从叶节点所在层到根节点所在的层遍历,然后逐层从左往右遍历) 样例 给出一棵二叉树 {3,9,20,#,#,15,7}, ...
- LintCode 二叉树的层次遍历 II
中等 二叉树的层次遍历 II 查看执行结果 42% 通过 给出一棵二叉树,返回其节点值从底向上的层次序遍历(按从叶节点所在层到根节点所在的层遍历,然后逐层从左往右遍历) 您在真实的面试中是否遇到过这个 ...
- LintCode-70.二叉树的层次遍历 II
二叉树的层次遍历 II 给出一棵二叉树,返回其节点值从底向上的层次序遍历(按从叶节点所在层到根节点所在的层遍历,然后逐层从左往右遍历) 样例 给出一棵二叉树 {3,9,20,#,#,15,7}, 按照 ...
- 算法练习之二叉树的最大深度,二叉树的层次遍历 II
1.二叉树的最大深度 给定一个二叉树,找出其最大深度. 二叉树的深度为根节点到最远叶子节点的最长路径上的节点数. 说明: 叶子节点是指没有子节点的节点. 示例:给定二叉树 [3,9,20,null,n ...
- 刷题-力扣-107. 二叉树的层序遍历 II
107. 二叉树的层序遍历 II 题目链接 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/binary-tree-level-order-tr ...
随机推荐
- SharePoint 2010:“&”作为SharePoint账号密码引起的错误
一朋友修改了SharePoint 2010系统账号密码,导致无法登陆.他的环境如下: 两台服务器:AD+SharePoint 2010 ,Sql Server 2008 r2 目标站点开启了Form登 ...
- nodejs前端开发环境安装
1. nodejs安装 要求:node版本6.2.0及以上,npm版本3.8.9及以上 Nodejs安装包地址: 2. 在rTools上下载并安装git 3. 在rTools上 ...
- insmod 时报错“Unknown symbol”问题的解决
在加载驱动模块时报错: “ Unknown symbol CFG80211_SupBandReInit (err 0)” 查看了内核代码以及加载上的symbol(命令为 cat /proc/kalls ...
- CentOS 6.5环境下使用HAProxy+apache实现web服务的动静分离
HAProxy提供高可用性.负载均衡以及基于TCP和HTTP应用的代理,支持虚拟主机,它是免费.快速并且可靠的一种解决方案.HAProxy特别适用于那些负载特大的web站点,这些站点通常又需要会话保持 ...
- 通达OA批量处理没有结束但前台显示已经结束的流程
问题描述: 通达OA系统出现大量流程没有结束,系统显示结束的问题 通过查询操作系统日志,数据库日志,包括程序日志没有发现异常,通过观察发现大量的流程结束时间都是在2016-02-16 17:32:XX ...
- 【前端】三个bug
目录 一.Array对象的indexOf() 二.使用jquery,clone()下拉框问题 三.jquery获取获取html5的data-*属性 一.Array对象的indexOf() 1.inde ...
- spring-boot 多线程
//配置类 package test; import org.springframework.aop.interceptor.AsyncUncaughtExceptionHandler; import ...
- __dirname与__filename
(1) __filename变量 node.js中,在任何模块文件内部,可以使用__filename变量获取当前模块文件的带有完整绝对路径的文件名. 在应用程序根目录下新建app.js文件,其中代码如 ...
- 前端工程化-webpack简介(一)
本质上,webpack 是一个现代 JavaScript 应用程序的静态模块打包器(module bundler).当 webpack 处理应用程序时,它会递归地构建一个依赖关系图(dependenc ...
- [转]清理ambari安装的hadoop集群
本文针对redhat或者centos 对于测试集群,如果通过ambari安装Hadoop集群后,想重新再来一次的话,需要清理集群. 对于安装了很多hadoop组件的话,这个工作很繁琐.接下来是我整理的 ...