题目描述:
给定一颗二叉树,判断是否是高度平衡的二叉树。高度平衡的二叉树定义:左右子树的高度差不超过1.
思路:这个问题可采用递归的思想,首先计算每个节点的左右子树的高度差是否为1,再判断左右子树是否为平衡二叉树,若是,则为平衡二叉树,否则不是。
伪代码:
if abs(高度(node.left)-高度(node.right))<=1 and node.left is balanced and node.right is balanced:
print('是平衡二叉树')
else:
print('不是平衡二叉树')
解法:
def isBalanceTree(self,root):
def dfs(node,depth):
if not node: return True
l = dfs(node.left,depth+1)
r = dfs(node.right,depth+1)
return max(l,r)+1
if not root: return True
if abs(dfs(root.left,0)-dfs(root.right,0))>1: return False
return self.isBalanceTree(root.left) and self.isBalanceTree(root.right)