102. 二叉树的层次遍历
102. 二叉树的层次遍历
题意
给定一个二叉树,返回其按层次遍历的节点值。 (即逐层地,从左到右访问所有节点)。
解题思路
递归:利用前序遍历的思想,在递归过程中记录下结点的深度,在对应深度将结点加入到结果中;
迭代:使用两个队列是因为一个用于记录当前层的结点,另外一个则记录下一层的结点,用于后面和当前队列进行替换;
实现
class Solution(object): def levelOrder(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[-1].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.append([]) return result def levelOrder(self, root): """ 递归实现 执行用时 : 36 ms, 在Binary Tree Level Order Traversal的Python提交中击败了39.42% 的用户 内存消耗 : 12.6 MB, 在Binary Tree Level Order Traversal的Python提交中击败了0.82% 的用户 :type root: TreeNode :rtype: List[List[int]] """ result = [] if not root: return result def helper(node, depth, res): """ 利用前序遍历的思想 """ if not node: return # 超出递归的长度表明是新的一层,则新添加数组 if depth >= len(res): res.append([]) # 可以理解成每个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) helper(root, 0, result) return result
转载于:https://www.cnblogs.com/George1994/p/10605049.html
102. 二叉树的层次遍历相关推荐
- c++根据二叉树的层次遍历建立二叉树_LeetCode | 102.二叉树的层次遍历
这次来写一下 LeetCode 的第 102 题,二叉树的层次遍历. 题目描述 题目直接从 LeetCode 上截图过来,题目如下: 102.二叉树的层次遍历题目 上面的题就是 二叉树的层次遍历 题目 ...
- leetcode 102 java_Java实现 LeetCode 102 二叉树的层次遍历
102. 二叉树的层次遍历 给定一个二叉树,返回其按层次遍历的节点值. (即逐层地,从左到右访问所有节点). 例如: 给定二叉树: [3,9,20,null,null,15,7], 3 / 9 20 ...
- 按层次遍历二叉树_LeetCode | 102.二叉树的层次遍历
这次来写一下 LeetCode 的第 102 题,二叉树的层次遍历. 题目描述 题目直接从 LeetCode 上截图过来,题目如下: 上面的题就是 二叉树的层次遍历 题目的截图,同时 LeetCode ...
- Leetcode 102. 二叉树的层次遍历
给定一个二叉树,返回其按层次遍历的节点值. (即逐层地,从左到右访问所有节点). 例如: 给定二叉树: [3,9,20,null,null,15,7], 3 / \ 9 20 / ...
- LeetCode 102. 二叉树的层次遍历(BFS)
文章目录 1. 题目信息 2. 解题 1. 题目信息 给定一个二叉树,返回其按层次遍历的节点值. (即逐层地,从左到右访问所有节点). 例如: 给定二叉树: [3,9,20,null,null,15, ...
- 【Leetcode】102. 二叉树的层次遍历
题目 给定一个二叉树,返回其按层次遍历的节点值. (即逐层地,从左到右访问所有节点). 例如: 给定二叉树: [3,9,20,null,null,15,7], 3/ \9 20/ \15 7 返回其层 ...
- LeetCode 102. 二叉树的层次遍历(递归)(迭代)
题目描述 给定一个二叉树,返回其按层次遍历的节点值. (即逐层地,从左到右访问所有节点). 思路 详见链接 代码 递归 #class TreeNode: # def __init__(self,x): ...
- Python刷leetcode 102. 二叉树的层次遍历
给定一个二叉树,返回其按层次遍历的节点值. (即逐层地,从左到右访问所有节点). 例如: 给定二叉树: [3,9,20,null,null,15,7], 3/ \9 20/ \15 7 返回其层次遍历 ...
- Leetcode 102. 二叉树的层次遍历 解题思路及C++实现
解题思路: 使用队列来存储每一层的节点,因为输出的vector中,每一层是一个数组,所以在循环内,需要另外一个队列,总共使用两个队列. 没获取一层的节点,就更新第一个队列a,将队列b直接赋给a. /* ...
最新文章
- Validation failed for one or more entities. See ‘EntityValidationErrors’解决方法
- lvs为何不能完全替代DNS轮询--转
- Java黑皮书课后题第7章:7.8(求数组的平均值)使用下面的方法头编写两个重载的方法,返回数组的平均数。编写一个测试程序,提示用户输入10个double型值,然后调用这个方法显示平均值
- 自动控制matlab实验,自动控制matlab实验.doc
- 免密登录堡垒机和服务器
- 【POJ - 1062】【nyoj - 510】昂贵的聘礼 (Dijkstra最短路+思维)
- LUNA16_Challange数据预处理2
- Python 之 获取Host Esxi 主机信息
- 在没有显示器和IP未知的情况下如何使用树莓派
- Java速成课程建议
- 部署asp.net mvc_在ASP.NET 2.0上部署ASP.NET MVC
- 攻防世界web练习区
- 树莓派之火焰传感器模块
- 鳄克斯系列服务器,英雄联盟:FPX冠军庆典活动进行中 一半宝石入手海科克斯系列皮肤...
- Python每日一练(20230301)
- c++define的用法
- 2014中国计量学院matlab考试卷,南京信息工程大学2011普本电路分析期末试卷A及答案...
- 调用Feign接口报错:HttpMessageNotReadableException:JSON parse error:Illegal character ((CTRL-CHAR, code 31)
- Prometheus 实战于源码分析之storage
- 【JAVA】MANIFEST.MF / CERT.SF 中 文件SHA1-Digest计算方法
热门文章
- 易语言修改虚拟机硬盘id_易语言本地虚拟机源码
- matlab怎么相加相同id的几行,matlab几个有用的技巧
- Python入门--局部变量,全局变量,作用域,LEGB规则
- 计算机网络—数据链路层的流量控制与可靠传输机制(思维导图)
- 人脸检测caffe下步骤
- [高光谱] Hyperspectral-Classification Pytorch 的高光谱场景的通用类 HyperX
- grafana设置mysql为数据源,并进行可视化
- python机器学习库sklearn——SGD梯度下降法
- linux集群中mpi的并行计算环境简单配置,linux集群中MPI的并行计算环境简单配置(转)...
- 《人性的弱点》--如欲采蜜,勿蹴蜂房。