题解 | #判断是不是平衡二叉树#
判断是不是平衡二叉树
https://www.nowcoder.com/practice/8b3b95850edb4115918ecebdf1b4d222
# class TreeNode: # def __init__(self, x): # self.val = x # self.left = None # self.right = None # # 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 # # # @param pRoot TreeNode类 # @return bool布尔型 # class Solution: def IsBalanced_Solution(self , pRoot: TreeNode) -> bool: # write code here if not pRoot: return True left_height = self.GetHeight(pRoot.left) right_height = self.GetHeight(pRoot.right) if left_height == -1 or right_height == -1 or abs(left_height-right_height)>1: return False else: return True def GetHeight(self, node): if not node: return 0 left_height = self.GetHeight(node.left) right_height = self.GetHeight(node.right) if left_height == -1 or right_height == -1 or abs(left_height-right_height)>1: return -1 else: return max(left_height, right_height)+1
可以使用递归来解决,分别判断左右两个子树的高度,然后判断左子树是否平衡,右子树是否平衡(如果任意一个子树已经不平衡就没有必要再计算了),如果都平衡则计算高度差值是否大于1,如果差值小于1则返回True,否则返回False。