阅读目录
题目描述
输入一棵二叉树,判断该二叉树是否是平衡二叉树。
思路及Python实现
- 平衡二叉树
平衡二叉树(Balanced Binary Tree)具有以下性质:它是一棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。平衡二叉树的常用实现方法有红黑树、AVL、替罪羊树、Treap、伸展树等。 最小二叉平衡树的节点的公式如下 F(n)=F(n-1)+F(n-2)+1 这个类似于一个递归的数列,可以参考Fibonacci数列,1是根节点,F(n-1)是左子树的节点数量,F(n-2)是右子树的节点数量。
class Solution:
def IsBalanced_Solution(self, pRoot):
# write code here
return self.dfs(pRoot) != -1
def dfs(self, p): # 求树的高度,并同时判断是不是平衡二叉树。
if p == None:
return 0
left = self.dfs(p.left)
# 先判断左子树是不是,如果左子树是平衡树,继续检查右子树,如果不是平衡树,直接返回-1层层跳出递归直到他的根节点
if left == -1:
return -1
right = self.dfs(p.right)
if right == -1:
return -1
if abs(left - right) > 1: # 执行到这一步,说明左右子树都是平衡二叉树,在判断在整体是不是二叉树,不是返回-1
return -1
return max(left, right) + 1 # 如果子树是平衡二叉树,则返回子树的高度