给定一个二叉树,找出其最大深度。
二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。
说明: 叶子节点是指没有子节点的节点。


递归法:

解题思路:
1、首先判断根目录是否为空节点,如果是,返回0,即深度为0;

if root == None: return 0

2、给ans赋初值为0;

self.ans = 0

3、如果存在根节点root,则将root和1分别传递给dfs()方法中root和path。

self.dfs(root, 1)

4、这里dfs()方法,如下所示。

  • 首先判断 root.right 和 root.left 是否存在,如果两个都不存在,则将
 max(self.ans, path)--->max(0,1) = 1

就是说如果只存在根节点root,而root.right 和 root.left不存在,则深度为1。

  • 再就是else,不论是存在 root.right 或者 root.left 都意味着深度加上1。
 max(self.ans, path)--->max(1,1+1) = max(1,2) = 2

5、如果深度超过2,我们可以看到else后面的语句,不断地重新赋值给root和path,直到为空,返回当前max(ans,path),相当于再方法dfs()中循环。

def dfs(self, root, path):if not root.right and not root.left:self.ans = max(self.ans, path)else:if root.left:self.dfs(root.left, path + 1)if root.right:self.dfs(root.right, path + 1)

完整代码:

链接:https://leetcode-cn.com/problems/maximum-depth-of-binary-tree/solution/104-er-cha-shu-de-zui-da-shen-du-python-upo6q/

class Solution:def maxDepth(self, root: TreeNode) -> int:if root == None: return 0 self.ans = 0self.dfs(root, 1)return self.ansdef dfs(self, root, path):if not root.right and not root.left:self.ans = max(self.ans, path)else:if root.left:self.dfs(root.left, path + 1)if root.right:self.dfs(root.right, path + 1)

力扣-第104题--二叉树的最大深度(python)--详细解析--逐步调试相关推荐

  1. 力扣第236题“二叉树的最近公共先祖”的解题思路

    参考代码: class Solution {public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {i ...

  2. 领扣-104/111 二叉树的最大深度 Maximum Depth of Binary Tree MD

    Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...

  3. Leetcode-How-What 力扣Leetcode刷题指南

    Leetcode-How-What 力扣Leetcode刷题指南 About the way how to use Leetcode wisely for preparing the intervie ...

  4. 算法面试不懂这6大数据结构知识一定挂!(附力扣LeetCode真题讲解)

    本文作者:苏勇,Google 资深技术工程师 首发地址:https://mp.weixin.qq.com/s/u8pvmupISQ5D4kGIkgfKbA 在互联网行业的算法面试中经常会被考到数据结构 ...

  5. 【JAVA】交错字符串——力扣每日一题(六)(2020.07.18)

    目录 题目:97. 交错字符串 思路 如果你从本文中学习到丝毫知识,那么请您点点关注.点赞.评论和收藏 大家好,我是爱做梦的鱼,我是东北大学大数据实验班大三的小菜鸡,非常渴望优秀,羡慕优秀的人,个人博 ...

  6. leetcode 力扣每日一题系列详解——总目录

    这是总目录,该系列持续更新中........ leetcode 力扣每日一题系列详解--总目录

  7. 【爬虫】力扣每日一题每天自动邮件提醒!!!

    使用python实现了一个力扣每日一题每天自动邮件提醒的小爬虫,小但实用!!! 文章目录 A.需求来源与分析 B.技术角度分析 C.具体分析步骤 1.接口协议分析 2.发邮件 3.写crontab放服 ...

  8. 力扣数据结构刷题Day1-4

    力扣数据结构刷题Day1-4 文章目录 力扣数据结构刷题Day1-4 前言 一.小试牛刀 存在重复元素(L217) 最大子数组和(L53) 动态规划法 贪心法 分治法 两数之和(L1) 合并两个有序数 ...

  9. python【力扣LeetCode算法题库】104-二叉树的最大深度

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

最新文章

  1. 工业环境中对机器学习的行业视角
  2. python合并word内容相同单元格_python:怎样合并文档中有重复部分的行?
  3. poj1220:高精度进制转换模板题
  4. log4j中配置日志文件相对路径方法
  5. .net core中使用缓存(cache)
  6. 软件项目组织管理(九)项目人力资源管理
  7. 程序员总结的:最没有学习效率的 5 种方法!你在用其中哪一种?
  8. java基础知识---IO常用基础操作(一)
  9. checkout 撤销修改_git命令(10):git 常用操作,撤销修改(2)
  10. grep 两个字符串_Linux运维工程师想要的12个grep指令
  11. 面试官:有了 for 循环,为什么还要 forEach ??
  12. 数据结构算法与应用c++语言描述 pdf +源代码,数据结构算法与应用-c++语言描述(清晰版).pdf...
  13. 【Jmeter+ant+Jenkins自动化持续集成】
  14. mybase6.0.4的license key的生成方法
  15. python研究生录取数据分析统计服_考研党必看!研究生报考录取比例数据查询方法...
  16. ios 出现log不打印 was compiled with optimization - stepping may behave oddly; variables may not be availa
  17. 提交和复位按钮的知识(Submit Reset Buttons)
  18. 2/8法则系列 | 你真的了解二八法则吗?
  19. 百度网盘撸用户羊毛是怎么一回事
  20. for_while循环作业

热门文章

  1. R语言可视化【ggplot2】
  2. android texturevideoview 缓存,TextureView实现VideoView
  3. 高校教师称大学生宿舍关系整体更趋冷漠
  4. 心的旅行——2009西藏行之林芝(四)
  5. 功能测试必备:抓包工具之谷歌开发者工具介绍及使用场景
  6. 3D人脸识别——人脸点云前处理
  7. 朱光潜《给青年的十二封信》
  8. IDEA汉化及如何改回英文界面版本
  9. Can‘t bind to ‘xxx‘ since it isn‘t a known property of ‘xxx‘,dom配置动态属性时候报错
  10. 卖家应该如何应对亚马逊多账号操作呢?