题目描述

给定一个二叉树,找出其最大深度。

二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。

说明: 叶子节点是指没有子节点的节点。

** 示例:** 给定二叉树 [3,9,20,null,null,15,7]

    3/ 9  20/  15   7

返回它的最大深度 3 。

解决思路

采用广度优先搜索(BFS)从根节点开始,逐层遍历,每遍历完一层深度加1。

代码

class TreeNode(object):def __init__(self, x):self.val = xself.left = Noneself.right = Noneclass Solution(object):def maxDepth(self, root):if not root:return 0nodes = [root]s = 0while len(nodes)>0:s += 1tmp = []for node in nodes:if hasattr(node, "left") and node.left is not None:tmp.append(node.left)if hasattr(node, "right") and node.right is not None:tmp.append(node.right)nodes = tmpprint(len(nodes))return s

首先,创建nodes变量存放每一层的node,预先将root节点放入,只要nodes不为空就代表还有节点没有被遍历到,s代表树的深度,tmp是一个临时列表。因为nodes存放每一层的所有节点,因此可以通过循环将每一个节点的子节点依次放入一个tmp列表中,待nodes循环结束,将tmp赋值给nodes变量,进行下一轮的判断,当nodes为空时程序退出,返回s。

测试

首先生成一颗树。

p = TreeNode(1)
p.left = TreeNode(2)
p.right = TreeNode(3)
p.left.left = TreeNode(4)
p.right.left = TreeNode(5)
p.right.right = TreeNode(6)
p.left.left.left = TreeNode(7)
p.right.right.left = TreeNode(8)
p.right.right.left.right = TreeNode(9)

树的结构如下,共有5层,共计9个节点。

solution = Solution()
depth = solution.maxDepth(p)
print(depth)

最终的结果为5,与预期一致。代码提交运行结果如下,还有很大的提升空间!

二叉树的深度_[LeetCode 104] 二叉树的深度相关推荐

  1. php 实现二叉树的最大深度_LeetCode题记——104二叉树的最大深度

    LeetCode 104 二叉树的最大深度,难度:简单,标签:前200,面试高频 题意: 给定一个二叉树,找出其最大深度. 二叉树的深度为根节点到最远叶子节点的最长路径上的节点数. 说明: 叶子节点是 ...

  2. Leetcode—— 104. 二叉树的最大深度

    104. 二叉树的最大深度 给定一个二叉树,找出其最大深度. 二叉树的深度为根节点到最远叶子节点的最长路径上的节点数. 说明: 叶子节点是指没有子节点的节点. 示例: 给定二叉树 [3,9,20,nu ...

  3. 精选力扣500题 第56题 LeetCode 104. 二叉树的最大深度【c++/java详细题解】

    目录 1.题目 2.思路 3.c++代码 4.java代码 1.题目 给定一个二叉树,找出其最大深度. 二叉树的深度为根节点到最远叶子节点的最长路径上的节点数. 说明: 叶子节点是指没有子节点的节点. ...

  4. 完全二叉树最小深度_树与二叉树递归c++

    树(Tree) 1.什么是树? 树是n个结点的有限集合. 当n=0时,称为空树.而任意非空树应满足: a.有且仅有一个特定的根结点.如"E"是该树的根结点. b.当n>1时, ...

  5. ⭐算法入门⭐《二叉树》简单07 —— LeetCode 993. 二叉树的堂兄弟节点

    文章目录 一.题目 1.题目描述 2.基础框架 3.原题链接 二.解题报告 1.思路分析 2.时间复杂度 3.代码详解 三.本题小知识 四.加群须知 一.题目 1.题目描述   在二叉树中,根节点位于 ...

  6. c++ 删除二叉树的子树_数据结构—树|二叉树|前序遍历、中序遍历、后序遍历【图解实现】...

    点击蓝字关注我们 AI研习图书馆,发现不一样的精彩世界 数据 结构 二叉树的遍历 一.树 在谈二叉树的知识点之前,我们首先来看一下树和图的基本概念.树:不包含回路的连通无向图,树是一种简单的非线性结构 ...

  7. java 二叉树的高度_最全二叉树:完整详解二叉树的遍历以及完全二叉树等6种二叉树...

    树在数据结构中占据了非常重要的位置,尤其是二叉树.经常是在java面试中必问的一个环节,而且二叉树的应用场景真的非常普遍,需要重点掌握好. 但是一直以来,很多同学对于二叉树的掌握都是不太全面.今天我就 ...

  8. 最近公共祖先_[LeetCode] 236. 二叉树的最近公共祖先

    题目链接: https://leetcode-cn.com/problems/lowest-common-ancestor-of-a-binary-tree 难度:中等 通过率:57.2% 题目描述: ...

  9. 二叉树层次遍历c语言_[LeetCode] 107. 二叉树的层次遍历 II

    题目链接 : https://leetcode-cn.com/problems/binary-tree-level-order-traversal-ii/ 题目描述: 给定一个二叉树,返回其节点值自底 ...

最新文章

  1. Java多线程之ReentrantReadWriteLock
  2. 案例实作图解.Net Entity Framework 教程
  3. 最详细易懂的CRC-16校验原理(附源程序)
  4. vim 分屏 最大化_Vim的分屏功能命令大全
  5. php的静态变量static在函数内部
  6. 极乐科技CEO应邀出席2017微信小程序生态课
  7. minion java上传文件_Java程序员如何快速理解Kubernetes
  8. Java高并发编程详解系列-单线程执行设计模式
  9. @程序员,2020年,这类程序员要做好苦日子准备了!
  10. POJ3264 Balanced Lineup【线段树】
  11. zookeeper教程,docker 安装,命令,python操作zookeeper,分布式队列,分布式锁
  12. 创业项目黄了,我靠着被废弃的副业项目,年收入45亿,将公司做到了200多亿市值...
  13. 2018级《程序设计基础(B)II》期末上机考试 重现--SDUT
  14. 学习计算机组成原理课程,推荐书籍,写CPU(随做更新
  15. PS4 不支持USB存储设备的文件系统 如何解决?
  16. 【SpringBoot2.0】基于Atomikos的多数据源分布式事务(XA)解决方案
  17. as ssd测试软件得分少,教大家AS SSD Benchmark如何测试硬盘性能
  18. dnf史诗计算机手机版,DNF手游终于要来了!可端游的史诗级装备该咋办…
  19. Java的并发集合框架
  20. 科学,宗教和信仰,以及神

热门文章

  1. 作业帮、猿辅导、学而思们,正在经历自己的高考
  2. c语言反编译_Gacrux:基于C语言的可自定义PE加载恶意软件
  3. mysql查询语句在哪里编写_mysql编写语句:更新查询
  4. python 类的绑定方法和非绑定方法
  5. ecshop 后台添加评论_如何提升外卖营业额?评论回复不可忽视
  6. linux ros是什么?(Robot Operating System)
  7. 程序时序图 Sequence Diagram(序列图) UML图(数据流程图)的绘制
  8. Visual Studio C/C++ 相对路径和绝对路径
  9. 如何使用scrapy的item来封装数据
  10. Kanade Doesn’t Want to Learn CG 模拟,读题训练,临界