文章目录

  • 二叉树的最大深度
    • 1.两种解法
      • 递归法--后序遍历
      • 迭代法--层序遍历
    • 2.总结
    • 推荐题目

二叉树的最大深度

leetcode链接

1.两种解法

递归法–后序遍历

采用后序遍历,先处理左孩子,再处理右孩子,最后处理中间节点;对于中间节点的处理就是求中间节点的最大深度,怎么求呢?

就是先求出中间节点的左子树的深度,再求出右子树的深度,然后取他们的最大值然后+1(这个+1是因为中间节点也算一层);

这样一看,是不是就发现需要做重复操作了。即想求中间节点的深度,就要求左子树深度,想求左子树深度,就要求左子树的左子树的深度(右子树同理)。这样一来我们就可以用后序遍历的逻辑(左右中)来写代码了。

递归出口就是,如果碰到了空节点,那么他的深度就是0。

代码如下:

def maxDepth(root):if not root:return 0# 使用后序遍历leftchild_depth = maxDepth(root.left) # 左rightchild_depth = maxDepth(root.right) # 右return max(leftchild_depth,rightchild_depth)+1 # 中

迭代法–层序遍历

看到这道题直观的想法就是,求深度的话那么我用层序遍历,定义一个变量,每到一层我就让这个变量+1,到最后这个变量的值就是深度了。那么我们要把这个变量+1的操作应该在层序遍历的什么位置呢,这里直接给出代码。

不清楚层序遍历的可以看我之前的文章:层序遍历

代码如下:

def maxDepth(root):queue = []depth = 0 # 定义depth变量if not root:return depth# 初始化先把root放入queue中queue.append(root)while queue:size = len(queue)depth += 1 # 每遍历完一层的节点就+1# 遍历该层的节点for i in range(size):node = queue.pop(0)if node.left:queue.append(node.left)if node.right:queue.append(node.right)return depth

2.总结

递归的时候要用到后序遍历的逻辑,不是凭空想象的。

推荐题目

n叉树的最大深度

算法_二叉树_二叉树的最大深度相关推荐

  1. 判断一棵树是否为完全二叉树的算法c语言_别再翻了,面试二叉树看这 11 个就够了!||CSDN博客精选...

    作者:一只不甘平凡的小鹿 数据结构与算法: 不知道你有没有这种困惑,虽然刷了很多算法题,当去面试的时候,面试官让你手写一个算法,可能你对此算法很熟悉,知道实现思路,但是总是不知道该在什么地方写,而且很 ...

  2. 判断一棵树是否为完全二叉树的算法c语言_[二叉树的面试算法](六)之二叉树结构判断-相关题型总结(4题)...

    在线oj练习地址 判断两棵二叉树是否相同_leetcode100 判断一棵树是否是平衡二叉树_leetcode110 翻转二叉树_leetcode226 判断一棵树是否为对称二叉树_leetcode1 ...

  3. java map用二叉树_【课堂笔记分享】linkedlist、二叉树、hashmap

    LinkedList序列分先进先出FIFO,先进后出FILO FIFO在Java中又叫Queue 队列 FILO在Java中又叫Stack 栈 LinkedList 与 List接口与ArrayLis ...

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

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

  5. 一棵二叉树的中根线索二叉树_二叉树面试题刷题模板(终极版)

    树结构 二叉树的最大深度 后序递归 二叉树最小深度 后序递归 二叉树的直径 后序递归 平衡二叉树 后序递归 小总结 对称的二叉树 递归解法 二叉树的镜像 后序递归 树的子结构 递归解法 二叉搜索树的最 ...

  6. 最大堆和最小堆和平衡二叉树_最小堆二叉树

    最大堆和最小堆和平衡二叉树 A Min Heap Binary Tree is a Binary Tree where the root node has the minimum key in the ...

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

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

  8. c#二叉树 取叶子节点个数_数据结构第四章:树与二叉树(二叉树的概念、性质、特殊二叉树)...

    第四章:树与二叉树(二叉树的逻辑结构) 1.二叉树 二叉树是树结构的一种,故二叉树也是逻辑结构. 二叉树:二叉树是n(n≥0)个结点的有限集合. · 1)n=0时,二叉树为空; · 2)n>0时 ...

  9. 二叉树的基本特性和二叉树的几种基本操作的机制_深入理解二叉树01 二叉树基础

    数据结构是所有的程序员就业过程中无法回避的知识,最近在回顾数据结构的内容,因此会不定期的推出一些数据结构的文章,分享自己的笔记. 树是数据结构中的重点,由于二叉树又是树中的重中之重.二叉树的应用也非常 ...

  10. java已知一个二叉树_#二叉树复习#

    #二叉树复习# 目录 满二叉树 完全二叉树 平衡二叉树 二叉树的主要性质 --二叉树的度 --二叉树的深度计算 二叉树的遍历 其他 符号变量     结点总数     深度     度为0的结点数/叶 ...

最新文章

  1. 怎么从Android App Bundle (.aab)提取和转换apks文件(从AAB到APKs的转换和提取)
  2. python ssh登录远程执行命令
  3. linux系统硬盘数据恢复软件下载,Linux硬盘数据恢复软件
  4. [HDU] 2612 Find a way - 用单源最短论经模拟的简单广搜
  5. 『Balancing Act 树的重心』
  6. 前端—每天5道面试题(十三)
  7. 一天一个小算法的学习之选择排序
  8. python女朋友_教你用Python感知女朋友的情绪变化!
  9. Maven安装与配制环境【win7/win10】
  10. Java Dump文件分析 - Eclipse MemoryAnalyzer
  11. Java课程设计——学生成绩管理系统
  12. php redis zset 延迟队列_PHP多进程基于Redis实现轻量级延迟队列
  13. Why C++ Is Not “Back”
  14. 保研面试/考研复试英语口语常见问题整理
  15. 用几何画板怎么作函数图像
  16. 促进目标实现的激励技巧
  17. 三维场景轻量化展示解决方案
  18. 第21章、系统设定工具(网络与打印机)与硬件侦测
  19. 解决idea运行Tomcat项目时网页自动打开test1_Web_exploded文件并且打开其他链接时报错404的问题
  20. 华为云CDN,给企业发展按下“加速键”

热门文章

  1. 示波器关键参数及选型推荐
  2. Qt用SVG图片作为背景图
  3. VMW15虚拟机安装macOS
  4. linux-vimdiff,diff,patch,cmp:文件比较
  5. python对文件进行tar和gz格式的压缩和解压缩(亲测,可用)
  6. Life Long Learning论文阅读记录之LwF
  7. 创基MIFI扩展坞自带4G上网功能扩展坞
  8. 浅谈线性稳压电源和开关稳压电源(开关电源)
  9. 1024分论坛:人工智能创新应用的优化实践和多产业落地
  10. 【大数据开发】大数据开发的一些基本概念