输入一颗二叉树,判断这棵树是否为二叉平衡树。首先来看一下二叉平衡树的概念:它是一 棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。因此判断一颗二叉平衡树的关键在于求出左右子树的高度差,而二叉树的高度又是怎么定义的呢?二叉树的高度指的是从根节点到叶子节点所有路径上包含节点个数的最大值。所以我们可以得出,父亲节点的高度与左右子树高度的关系为:父亲节点的高度=max(左子树高度,右子树高度)+1,同时我们知道,叶子节点的高度值为1(或则0,这里定义1或者0对判断结果没有影响),根据这两条规则,我们就可以利用迭代来求出树的高度。从叶子节点开始不断回溯,依次求得左右节点的高度并判断左右节点的高度差,然后继续向上判断,具体过程参见代码。

class TreeNode:def __init__(self, x):self.val = xself.left = Noneself.right = None
class Solution:#判断平衡二叉树    def IsBalanced_Solution(self, pRoot):# write code heredef balanced(root,height=0):#叶子节点的高度定义为0if not root:height=0return True,height#由根节点向下迭代balanceleft,left=balanced(root.left)balanceright,right=balanced(root.right)#如果左右子树都是平衡二叉树并且高度差不超过1,那么继续向上判断,父亲节点的高度值=max(左,右)+1if balanceleft and balanceright:if abs(left-right)<=1:height=left+1 if left>right else right+1return True,heightreturn False,heightbalance,height=balanced(pRoot)return balance

转载于:https://www.cnblogs.com/bambipai/p/10194754.html

判断一颗二叉树是否为二叉平衡树 python 代码相关推荐

  1. 判断一颗二叉树是否为二叉搜索树(Validate Binary Search Tree)

    一.学习要点: 利用二叉搜索树的中序遍历为递增数组的性质: 二.代码: void middle(node* root,vector<int>& inorder) {if(root= ...

  2. 按照层次序列创建二叉树,并判断二叉树是否为二叉搜索树

    首先定义树节点的数据结构,如下: struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; }; 两个函数,用 ...

  3. 二叉平衡树的插入和删除操作

    [转载]二叉平衡树的插入和删除操作 1.      二叉平衡树 二叉排序树查找.插入和删除操作的时间复杂度和树的深度n有关.构建树时,当先后插入的结点按关键字有序时,二叉排序树退化为单枝树,平均查找长 ...

  4. C语言判断二叉树是否为二叉搜索树(附完整源码)

    C语言判断二叉树是否为二叉搜索树 C语言判断二叉树是否为二叉搜索树完整源码(定义,实现,main函数测试) C语言判断二叉树是否为二叉搜索树完整源码(定义,实现,main函数测试) #include ...

  5. 判断二叉树是否为二叉搜索树

    1.题目 给定一棵二叉树的根节点,判断其是否为二叉搜索树. 2.分析 二叉搜索树:每一棵子树的根节点,左子树的值比根节点的值小,右子树的值比根节点的值大. 经典的二叉搜索树是没有重复值的.如果要放重复 ...

  6. 二叉树--二叉平衡树

    二叉平衡树是二叉树中最为最要的概念之一,也是在语言库或者项目中应用比较广泛的一种特殊的树形结构. 二叉平衡树 AVL树是高度平衡的而二叉树.它的特点是:AVL树中任何节点的两个子树的高度最大差别为1. ...

  7. C++判断一棵树是否为AVL(二叉平衡树)

    1. 题目要求 判断一棵二叉树是否是平衡二叉树 2. 思路 AVL树的名字来源于它的发明作者G.M. Adelson-Velsky 和 E.M. Landis.AVL树是最先发明的自平衡二叉查找树(S ...

  8. 数据结构---判断一棵树是否是二叉搜索树

    数据结构-判断一棵树是否是二叉搜索树 代码: #pragma once #define N 100 #define elemType BTree* #include<stdlib.h> t ...

  9. 判定一棵二叉树是否是二叉搜索树

    问题 给定一棵二叉树,判定该二叉树是否是二叉搜索树(Binary Search Tree)? 解法1:暴力搜索 首先说明一下二叉树和二叉搜索树的区别.二叉树指这样的树结构,它的每个结点的孩子数目最多为 ...

  10. 二叉树常见算法题(单值二叉树、二叉树的最大深度、反转二叉树、判断两颗二叉树是否相同、对称二叉树、一颗二叉树是否是另一颗二叉树的子树)

    这里的代码都是递归实现的,再强调下二叉树的概念,二叉树的构成有两种情况: 1.空树 2.根节点 + 左子树 + 右子树(这里的左子树和右子树又是一颗二叉树) 可以看出二叉树就是递归定义的,下面的算法题 ...

最新文章

  1. Two Straws May Make a Perfect Diamond: Selecting Individually Weak Features for a Better Accuracy
  2. 图像分类简单介绍-转
  3. 读取String数组内的内容
  4. maven中scope属性的
  5. ssh 配置:在 Linux 中 ssh 配置无密码登陆完整步骤以及易错点分析
  6. [转]ASP.NET面试题
  7. object怎么转list_PaddleOCR识别模型转Pytorch全流程记录
  8. samba配置过程(附网络凭据的解决方法)
  9. 深圳联通与深圳中琛源科技正式达成了5Gn战略合作
  10. 两台Windows7的笔记本,充分利用自带无线网卡共享上网。
  11. python 俄罗斯方块_俄罗斯方块
  12. ewebeditor php漏洞,ewebeditor for php任意文件上传漏洞
  13. 使用jupyter做数据分析与挖掘
  14. 接力和隔空投送无效、handoff airdrop无效
  15. ProxySQL 配置详解及读写分离(+GTID)等功能说明 (完整篇)1
  16. 小程序人脸核验功能实现-边读边录(一)
  17. typechoSEO站点收录插件推荐
  18. iOS 显示SVG文件的方法
  19. Docker生态不会重蹈Hadoop的覆辙
  20. CNMOOC-os- ch2硬件基础

热门文章

  1. 数据分析EXCEL常用统计函数
  2. 从单片机——快速上手PLC
  3. java javac 以及 javaw
  4. 数梅派4b 显示器_无显示器配置树莓派4B
  5. 对称加密算法和非对称加密算法的完美结合
  6. c语言判断一个数是否为素数思路,C语言判断一个数是否为素数方法解析
  7. 香橙派进入系统后设置ip
  8. 苹果sf字体_全网首发丨iOS13越狱系统字体分析+iOS13新字体分享
  9. 汉诺塔实例python_python递归版汉诺塔实例 python汉诺塔递归算法
  10. 微软office Excel 2013 2016 如何启用宏功能的图文教程