zoukankan      html  css  js  c++  java
  • 判断一颗二叉树是否为二叉平衡树 python 代码

      输入一颗二叉树,判断这棵树是否为二叉平衡树。首先来看一下二叉平衡树的概念:它是一 棵空树或它的左右两个子树的高度差的绝对值不超过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

     

  • 相关阅读:
    类成员函数的重载、覆盖和隐藏区别 (C++)(转)
    man时括号里的数字是啥意思
    Redis事务
    功能接口
    持久化方式
    宿主
    路由
    静态文件
    Log4Net 配置
    Redis命令与配置
  • 原文地址:https://www.cnblogs.com/bambipai/p/10194754.html
Copyright © 2011-2022 走看看