题目描述
题解
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
题解1:
# 与自己思路相似的一种解法
def isBalanced(self, root: TreeNode) -> bool:
if not root:
return True
left_result=self.isBalanced(root.left)
right_result = self.isBalanced(root.right)
result = left_result and right_result
return result and abs(self.max_depth(root.left)-self.max_depth(root.right))<=1
def max_depth(self,node):
return max(self.max_depth(node.left)+1,self.max_depth(node.right)+1) if node else 0
题解2:
# 一种较优的解法
def isBalanced(self, root: TreeNode) -> bool:
return self.recur(root) != -1
def recur(self, root):
if not root: return 0
left = self.recur(root.left)
if left == -1: return -1
right = self.recur(root.right)
if right == -1: return -1
return max(left, right) + 1 if abs(left - right) < 2 else -1
总结
1、
第一种方法比较容易想到,利用递归的方法,求得当前左右子树的最大深度,并进行比较,判断是否是平衡树
2、
紧抓平衡树的判定条件——绝对值不超过1。从底至顶返回子树最大高度,当判断其深度超过1时,便提前结束。
3、
绝对值求法。
(1) abs() 。 内置函数,可求复数
(2) math.fabs() 。math模块定义,使用与float和integer 。