二叉树的深度和平衡二叉树的深度
二叉树的深度
虽然前面已经做了二叉树的深度,仍然不牢固。
剑指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
二叉树的深度和平衡二叉树的深度相关推荐
- 《剑指offer》-- 树的子结构、二叉树的镜像、二叉树的深度、平衡二叉树
一. 树的子结构: 1.题目: 输入两棵二叉树A,B,判断B是不是A的子结构.(ps:我们约定空树不是任意一个树的子结构. 2.解题思路: 这个题比较简单,利用递归的方式就可以判断B是不是A树的子结构 ...
- java 二叉树的深度、平衡二叉树、二叉树的下一个结点
1. 二叉树的深度 1. 题目描述 输入一棵二叉树,求该树的深度.从根结点到叶结点依次经过的结点(含根.叶结点)形成树的一条路径,最长路径的长度为树的深度. 2. 求解思路 可以用后序遍历,从最后一层 ...
- 每天一道LeetCode-----计算二叉树的最大深度及最小深度,判断二叉树是否是高度平衡二叉树
Maximum Depth of Binary Tree 原题链接Maximum Depth of Binary Tree 计算给定二叉树的最大深度,最大深度指从根节点到叶子节点的最长路径上的节点个数 ...
- 二叉树的深度,平衡二叉树深度
题目描述 输入一棵二叉树,求该树的深度.从根结点到叶结点依次经过的结点(含根.叶结点)形成树的一条路径,最长路径的长度为树的深度. 算法: 1.如果树为空,则深度为0 2.如果树不是空,那么深度是左子 ...
- 讲透学烂二叉树(六):二叉树的笔试题:翻转|宽度|深度
翻转|镜像二叉树 华为面试题--将二叉树的两个孩子换位置,即左变右,右变左. 90% of our engineers use the software you wrote (Homebrew), b ...
- 二叉树层次遍历--广度遍历和深度遍历
问题来源:二叉树层次遍历 问题描述:给定一个二叉树,返回其按层次遍历的节点值. (即逐层地,从左到右访问所有节点). 例子: 给定二叉树: [3,9,20,null,null,15,7], 3/ \9 ...
- C语言实现二叉树的各种遍历及求解深度
C语言实现二叉树的各种遍历及求解深度 一.介绍 ...
- 获取二叉树的所有叶子节点、获取全树深度与左右子树深度求解:递归
树的左右子树深度 全树的深度 //因为我们现在能够不重复,不遗漏获取每一个节点,只有前中后序3种方法,所以,我们首先先写出 //先序递归获取树的深度 int hight = 0;//它可以在多个函数之 ...
- 【algods】4.树和二叉树、完全二叉树、满二叉树、二叉查找树、平衡二叉树、堆、哈夫曼树、散列表...
本博客内容耗时4天整理,如果需要转载,请注明出处,谢谢. 1.树 1.1树的定义 在计算机科学中,树(英语:tree)是一种抽象数据类型(ADT)或是实作这种抽象数据类型的数据结构,用来模拟具有树状结 ...
最新文章
- PHP和js判断访问设备是否是微信浏览器实例
- varnish---反向代理web加速缓存服务器和CDN的推送
- JAVA常用的数据结构集合框架总结
- python3.0 数据类型、万恶的编码、文件操作
- 557. 反转字符串中的单词 III golang 数组和字符串反转
- 随想录(lua源码学习)
- 电脑可以同时装python2和3吗_在同一台电脑上同时安装Python2和Python3-Go语言中文社区...
- 使用 CometD、Apache 和 Camel 的 502 代理错误
- 玩奇迹私服老是服务器维护,为什么奇迹私服进不去啊
- CSS中超链接样式的书写顺序
- java 后台判断浏览器类型
- linux 提取执行命令后的输出 shell脚本
- excel计算机快捷键大全,excel表格使用技巧快捷键大全
- 霍夫丁不等式及其他相关不等式证明
- 展讯8541E:NFC PM1810驱动调试
- matlab图形黎曼几何,黎曼几何不一致的定理—元数学与元物理学(22)
- 如何把NDI|HX2视频源通过高清解码器进行解码?
- 显卡升级测试软件,Shader Model 5.0显卡测试工具 显卡升级测试工具
- Android 视频播放 界面变形处理
- C++Error2208:…尝试引用已删除的函数