判断二叉树是否为平衡二叉树
题目
给定一棵树,判断是否为平衡二叉树
思路1
逐层根据高度判断是否平衡
def is_balance1(self):
def height(node):
if node is None:
return 0
l = height(node.left)
r = height(node.right)
return max(l, r) + 1
def balance(node):
if node is None:
return True
l_height = height(node.left)
r_height = height(node.right)
if abs(l_height - r_height) > 1:
return False
left_balance = balance(node.left)
right_balance = balance(node.right)
return left_balance and right_balance
return balance(self.root)
思路2
计算高度过程中判断
def is_balance2(self):
def get_height(node):
if node is None:
return 0
left_height = get_height(node.left)
if not balance[0]:
return left_height + 1
right_height = get_height(node.right)
if not balance[0]:
return right_height + 1
if abs(left_height - right_height) > 1:
balance[0] = False
return max(left_height, right_height) + 1
balance = [True]
get_height(self.root)
return balance[0]
也可以写成返回值中返回平衡与否
def is_balance(self):
def get_height(node):
if node is None:
return 0, True
left_height, left_balance = get_height(node.left)
if not left_balance:
return 0, False
right_height, right_balance = get_height(node.right)
if not right_balance:
return 0, False
if abs(left_height - right_height) > 1:
return max(left_height, right_height) + 1, False
return max(left_height, right_height) + 1, True
h, b = get_height(self.root)
return b