二叉树的深度

虽然前面已经做了二叉树的深度,仍然不牢固。
剑指offer里面用的是递归的方法。只要的思路就是,左子树和右子树的比较,大的一支加1作为深度。并不是此时右子树的深度就不加一,现在考虑的是该节点的深度,而不是左右子树的,左右子树只是helper。该节点可能也是其他结点的左右结点之一。
借鉴的一个大神的图,很清晰:

也是相当于后序遍历。

def depth(root, num):if not root:return numres1 = depth(root.left, num+1)res2 = depth(root.right, num+1)if res1 > res2:return res1else:return res2
def maxdepth(root):if not root:return 0depthleft = maxdepth(root.left)depthright = maxdepth(root.right)if depthleft > depthright:depthleft += 1return depthleft  # return的就是本结点的深度else:defpthright += 1return depthright

平衡二叉树

如果直接套用maxdepth的函数的话,需要对每一个结点都调用一次这个函数,那么很多结点的深度都计算重复了。
改进就是通过后序遍历,也是相当于上面maxdepth一样,记住了深度,依次比较。
在自下而上求每个结点的深度的同时,附带判断一下左右子树的深度差是否大于1。直到判断到根节点,如果都是平衡二叉树,那么就是了。
tips:多层的递归无法中途停止,借助类的self成员变量来保存中途的信息。

class Solution(object):def isBalanced(self, root):  # 记录下每个结点的深度,后序遍历if not root:return Trueself.sign = Truedef maxdepth(root):if not root:return 0nl = maxdepth(root.left)nr = maxdepth(root.right)if nl > nr :if abs(nl-nr)>1:self.sign = Falsenl += 1return nlelse:if abs(nl-nr)>1:self.sign = Falsenr += 1return nrmaxdepth(root)return self.sign

二叉树的深度和平衡二叉树的深度相关推荐

  1. 《剑指offer》-- 树的子结构、二叉树的镜像、二叉树的深度、平衡二叉树

    一. 树的子结构: 1.题目: 输入两棵二叉树A,B,判断B是不是A的子结构.(ps:我们约定空树不是任意一个树的子结构. 2.解题思路: 这个题比较简单,利用递归的方式就可以判断B是不是A树的子结构 ...

  2. java 二叉树的深度、平衡二叉树、二叉树的下一个结点

    1. 二叉树的深度 1. 题目描述 输入一棵二叉树,求该树的深度.从根结点到叶结点依次经过的结点(含根.叶结点)形成树的一条路径,最长路径的长度为树的深度. 2. 求解思路 可以用后序遍历,从最后一层 ...

  3. 每天一道LeetCode-----计算二叉树的最大深度及最小深度,判断二叉树是否是高度平衡二叉树

    Maximum Depth of Binary Tree 原题链接Maximum Depth of Binary Tree 计算给定二叉树的最大深度,最大深度指从根节点到叶子节点的最长路径上的节点个数 ...

  4. 二叉树的深度,平衡二叉树深度

    题目描述 输入一棵二叉树,求该树的深度.从根结点到叶结点依次经过的结点(含根.叶结点)形成树的一条路径,最长路径的长度为树的深度. 算法: 1.如果树为空,则深度为0 2.如果树不是空,那么深度是左子 ...

  5. 讲透学烂二叉树(六):二叉树的笔试题:翻转|宽度|深度

    翻转|镜像二叉树 华为面试题--将二叉树的两个孩子换位置,即左变右,右变左. 90% of our engineers use the software you wrote (Homebrew), b ...

  6. 二叉树层次遍历--广度遍历和深度遍历

    问题来源:二叉树层次遍历 问题描述:给定一个二叉树,返回其按层次遍历的节点值. (即逐层地,从左到右访问所有节点). 例子: 给定二叉树: [3,9,20,null,null,15,7], 3/ \9 ...

  7. C语言实现二叉树的各种遍历及求解深度

                                                                               C语言实现二叉树的各种遍历及求解深度 一.介绍   ...

  8. 获取二叉树的所有叶子节点、获取全树深度与左右子树深度求解:递归

    树的左右子树深度 全树的深度 //因为我们现在能够不重复,不遗漏获取每一个节点,只有前中后序3种方法,所以,我们首先先写出 //先序递归获取树的深度 int hight = 0;//它可以在多个函数之 ...

  9. 【algods】4.树和二叉树、完全二叉树、满二叉树、二叉查找树、平衡二叉树、堆、哈夫曼树、散列表...

    本博客内容耗时4天整理,如果需要转载,请注明出处,谢谢. 1.树 1.1树的定义 在计算机科学中,树(英语:tree)是一种抽象数据类型(ADT)或是实作这种抽象数据类型的数据结构,用来模拟具有树状结 ...

最新文章

  1. PHP和js判断访问设备是否是微信浏览器实例
  2. varnish---反向代理web加速缓存服务器和CDN的推送
  3. JAVA常用的数据结构集合框架总结
  4. python3.0 数据类型、万恶的编码、文件操作
  5. 557. 反转字符串中的单词 III golang 数组和字符串反转
  6. 随想录(lua源码学习)
  7. 电脑可以同时装python2和3吗_在同一台电脑上同时安装Python2和Python3-Go语言中文社区...
  8. 使用 CometD、Apache 和 Camel 的 502 代理错误
  9. 玩奇迹私服老是服务器维护,为什么奇迹私服进不去啊
  10. CSS中超链接样式的书写顺序
  11. java 后台判断浏览器类型
  12. linux 提取执行命令后的输出 shell脚本
  13. excel计算机快捷键大全,excel表格使用技巧快捷键大全
  14. 霍夫丁不等式及其他相关不等式证明
  15. 展讯8541E:NFC PM1810驱动调试
  16. matlab图形黎曼几何,黎曼几何不一致的定理—元数学与元物理学(22)
  17. 如何把NDI|HX2视频源通过高清解码器进行解码?
  18. 显卡升级测试软件,Shader Model 5.0显卡测试工具 显卡升级测试工具
  19. Android 视频播放 界面变形处理
  20. C++Error2208:…尝试引用已删除的函数

热门文章

  1. 5V升压充电8.4V芯片
  2. Linux 查找项目路径
  3. Matlab绘图-详细,全面(二维三维等)
  4. 超详细的 DNS 协议解析
  5. Socket和ServerSocket的介绍
  6. c++ sleep函数 linux,sleep()函数 | C/C++程序员之家
  7. Flutter 入门笔记 三
  8. jrebel 反代理服务搭建
  9. Docker - 单独搭建部署应用服务(Nginx+Php+Mysql+Redis)
  10. 第三方软件测试 CNAS软件测试报告