牛客网-每日一练

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

#
# 
# @param root TreeNode类 
# @return bool布尔型
#
class Solution:
    def isBalanced(self , root ):
        # write code here
        def calculate(root):
            if not root:
                return True,0
            elif not root.left and not root.right:
                return True,1
            else:
                if root.left:
                    Lbalance, Lheight = calculate(root.left)
                else:
                    Lbalance, Lheight = True,0
                if root.right:
                    Rbalance, Rheight = calculate(root.right)
                else:
                    Rbalance, Rheight = True, 0
                if Lbalance and Rbalance and abs(Lheight - Rheight)<=1:
                    return True, max(Lheight, Rheight) + 1
                else:
                    return False , -1
        balance, height = calculate(root)
        return(balance)

此题为牛客网中经典必刷题,题目为
本题要求判断给定的二叉树是否是平衡二叉树
平衡二叉树的性质为: 要么是一棵空树,要么任何一个节点的左右子树高度差的绝对值不超过 1。
一颗树的高度指的是树的根节点到所有节点的距离中的最大值。
 
本题使用递归的思想,将判断平衡与高度分开计算
我在此题中掌握了分开计算的思想
posted @ 2021-03-23 20:45  YBINing  阅读(40)  评论(0编辑  收藏  举报