判断一颗二叉树是否为二叉平衡树 python 代码

Posted Alice_鹿_Bambi

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了判断一颗二叉树是否为二叉平衡树 python 代码相关的知识,希望对你有一定的参考价值。

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

首先定义二叉树的类

class TreeNode:
    def __init__(self, x):
        self.val = x
        self.left = None
        self.right = None

然后利用迭代进行判断

#判断平衡二叉树    
    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 代码的主要内容,如果未能解决你的问题,请参考以下文章

剑指offer系列43---判断平衡二叉树

101 Symmetric Tree 判断一颗二叉树是否是镜像二叉树

(树)判断一颗二叉树是否为镜像对称

已知一颗二叉链表表示二叉树T ,编写函数,判断T是不是为完全二叉树。先

判断一颗树是否是平衡二叉树

判断二叉树是否对称的代码