python 得到树的深度、判断树是否为平衡树
来源:互联网 发布:前海人工智能主题混合 编辑:程序博客网 时间:2024/05/16 16:03
0. 树中结点的结构:
class TreeNode: def __init__(self, x): self.val = x self.left = None self.right = None
1. 树的深度:
def TreeDepth(self,pRoot): if(not pRoot): return 0 else: nLeft = self.TreeDepth(pRoot.left) nRight = self.TreeDepth(pRoot.right) return max(nLeft+1,nRight+1)
解释:nLeft,nRight 分别表示pRoot的左右结点的深度,返回两者中较大的,即为深度。
2. 判断是否为平衡树:
平衡树:树中任意结点的左右子树深度差小于或者等于1.
def IsBalanced_Solution(self, pRoot): #判断是否为平衡二叉树 if(not pRoot): return True else: if abs(self.TreeDepth(pRoot.left)-self.TreeDepth(pRoot.right))>1: #当某一结点的左右子树高度差大于1时,返回False return False else: return self.IsBalanced_Solution(pRoot.left) and self.IsBalanced_Solution(pRoot.right) #否则递归地向下判断其子树是否平衡。
这里解释一下为什么要 “递归地向下判断其子树是否平衡”:
如下图所示:若pRoot=A,则左右高度相差为1,满足平衡树的条件。但是,pRoot=B 时,左右的高度差为2,则不满足平衡树,因此,我们需要递归地向下判断每个结点的子树是否平衡。
总代码:
class Solution: def IsBalanced_Solution(self, pRoot): #判断是否为平衡二叉树 if(not pRoot): return True else: if abs(self.TreeDepth(pRoot.left)-self.TreeDepth(pRoot.right))>1: return False else: return self.IsBalanced_Solution(pRoot.left) and self.IsBalanced_Solution(pRoot.right) def TreeDepth(self,pRoot): if(not pRoot): return 0 else: nLeft = self.TreeDepth(pRoot.left) nRight = self.TreeDepth(pRoot.right) return max(nLeft+1,nRight+1)
0 0
- python 得到树的深度、判断树是否为平衡树
- 【树】二叉树的深度 + 树的最小深度 + 判断是否为平衡二叉树
- 剑指offer 39-二叉树的深度 判断二叉树是否为平衡二叉树
- 二叉树的深度以及判断二叉树是否为平衡二叉树
- 剑指offer 39. 二叉树的深度和判断是否为平衡二叉树
- 递归求树的深度,判断是否是平衡树
- 二叉树的深度,判断是否是平衡二叉树
- 二叉树的深度求值和判断是否是平衡
- 求二叉树的最大深度、最小深度、反转二叉树及判断是否为平衡二叉树
- 判断二叉树是否为平衡树
- 判断树是否为平衡二叉树
- 判断二叉树是否为平衡树
- 判断树是否为平衡二叉树
- 判断二叉树是否为平衡树
- 判断树是否为平衡二叉树
- python二叉树深度 判断平衡树
- cc150:判断一棵树是否为平衡树
- 判断一棵树是否为平衡二叉树
- 日常小错误(3)
- CSS文件引入另一个CSS文件
- DISPLAY
- 给自己写个ToDo吧
- 数据库中间件选型思考
- python 得到树的深度、判断树是否为平衡树
- Unreal Engin_画廊制作笔记 _013<设置漫游摄像机001>
- java中int与integer的区别
- CoordinatorLayout按钮随着View移动
- poj 1094 Sorting It All Out(拓扑排序)
- 转载+原创
- 进阶版链表
- RxJS异步通信之map、flatMap
- 程序学3DMax之改变物体的中心轴及物体归置零点