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

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

判断一颗二叉树是否为二叉平衡树 python 代码的更多相关文章

  1. 小白专场-是否同一颗二叉搜索树-python语言实现

    目录 一.二叉搜索树的相同判断 二.问题引入 三.举例分析 四.方法探讨 4.1 中序遍历 4.2 层序遍历 4.3 先序遍历 4.4 后序遍历 五.总结 六.代码实现 一.二叉搜索树的相同判断 二叉 ...

  2. 判断一棵树是否为二叉搜索树(二叉排序树) python

    输入一棵树,判断这棵树是否为二叉搜索树.首先要知道什么是排序二叉树,二叉排序树是这样定义的,二叉排序树或者是一棵空树,或者是具有下列性质的二叉树: (1)若左子树不空,则左子树上所有结点的值均小于它的 ...

  3. 二叉平衡树AVL的插入与删除(java实现)

    二叉平衡树 全图基础解释参考链接:http://btechsmartclass.com/data_structures/avl-trees.html 二叉平衡树:https://www.cnblogs ...

  4. 算法题 19 二叉平衡树检查 牛客网 CC150

    算法题 19 二叉平衡树检查 牛客网 CC150 实现一个函数,检查二叉树是否平衡,平衡的定义如下,对于树中的任意一个结点,其两颗子树的高度差不超过1. 给定指向树根结点的指针TreeNode* ro ...

  5. AVL树(二叉平衡树)详解与实现

    AVL树概念 前面学习二叉查找树和二叉树的各种遍历,但是其查找效率不稳定(斜树),而二叉平衡树的用途更多.查找相比稳定很多.(欢迎关注数据结构专栏) AVL树是带有平衡条件的二叉查找树.这个平衡条件必 ...

  6. java项目---用java实现二叉平衡树(AVL树)并打印结果(详)(3星)

    package Demo; public class AVLtree { private Node root; //首先定义根节点 private static class Node{ //定义Nod ...

  7. 从零开始学算法---二叉平衡树(AVL树)

    先来了解一些基本概念: 1)什么是二叉平衡树? 之前我们了解过二叉查找树,我们说通常来讲, 对于一棵有n个节点的二叉查找树,查询一个节点的时间复杂度为log以2为底的N的对数. 通常来讲是这样的, 但 ...

  8. 各种查找算法的选用分析(顺序查找、二分查找、二叉平衡树、B树、红黑树、B+树)

    目录 顺序查找 二分查找 二叉平衡树 B树 红黑树 B+树 参考文档 顺序查找 给你一组数,最自然的效率最低的查找算法是顺序查找--从头到尾挨个挨个遍历查找,它的时间复杂度为O(n). 二分查找 而另 ...

  9. Algorithms: 二叉平衡树(AVL)

    二叉平衡树(AVL):   这个数据结构我在三月份学数据结构结构的时候遇到过.但当时没调通.也就没写下来.前几天要用的时候给调好了!详细AVL是什么,我就不介绍了,维基百科都有.  后面两月又要忙了. ...

随机推荐

  1. python 的 import 使用规则

    对于含有 __init__.py 的目录(如adir),其实它就是一个package,它的子目录如果也包含 __init__.py,则只要将 adir 加入 sys.path,则它的字目录就不用加了, ...

  2. Openstack(五)Memcache- repcached集群

    5.1.1下载Memcache- repcached并解压 # wget http://downloads.sourceforge.net/repcached/memcached-1.2.8-repc ...

  3. soapUI-DataSource Loop

    1.1.1  DataSource Loop 当我们需要遍历某DataSource中的所有内容时.需要在TestCase中添加DataSource Loop步骤,然后双击它进行配置,如下图所示: Op ...

  4. 【UI】android如何绘制一个饼图

    代码下载 需求 1:实心饼图,颜色填充百分比区域 2:带区域说明 3:饼图有阴影 思路:这个其实和绘制进度条原理差不多,都是360度根据所占百分比算出绘制弧度,然后调用canvas的画弧函数. 阴影其 ...

  5. 《Java入门第二季》第三章 继承

    Java 中的继承1.作用:代码复用. 2.语法:extends关键字. 3.注意点:私有(private)财产(methods.fields)不可继承. Java 中的方法重写 Java 中的继承初 ...

  6. Vue学习笔记之Vue的面向对象

    0x00 准备工作 JavaScript 语言中,生成实例对象的传统方法是通过构造函数. function Animal(name,age){ this.name = name; this.age = ...

  7. Linux内核分析 05

    扒开系统调用的三层皮(下) 一,给MenuOS增加time和time-asm命令 把time和time-asm添加到MenuOS里面去 作为命令.扩展MenuOS的功能.本周把上周增加的系统调用添加进 ...

  8. 20145311 《Java程序设计》第2周学习总结

    20145311 <Java程序设计>第2周学习总结 教材学习内容总结 3.1Java的类型分为基本类型(Primitive type)和类类型(Class type)基本类型: *整数: ...

  9. 论cudnn与cuda之间的关系,和实际例子测试。

    1.其中cudnn是一个常见的神经网络层加速库文件,其能够很大程度的把加载到显卡上的网络层数据进行优化计算.cuda就像一个傻大粗的加速库,其主要是依靠的是显卡 计算速度跟一些算法的优化,而且其也是进 ...

  10. jz2440-uboot-201204版本移植【学习笔记】【原创】

    平台:jz2440 作者:庄泽彬(欢迎转载,请注明作者) 说明:韦东山二期视频学习笔记 交叉编译工具:arm-linux-gcc (GCC)4.3.2 PC环境:ubuntu18.04 一.uboot ...