题目描述:
输入一棵二叉树,判断该二叉树是否是平衡二叉树。
解题思路:
平衡二叉树(Balanced Binary Tree)具有以下性质:
它是一棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。
平衡二叉树的常用实现方法有红黑树、AVL、替罪羊树、Treap、伸展树等。
最小二叉平衡树的节点的公式如下 F(n)=F(n-1)+F(n-2)+1 这个类似于一个递归的数列,可以参考Fibonacci数列,1是根节点,F(n-1)是左子树的节点数量,F(n-2)是右子树的节点数量。
本题根据"左右两个子树的高度差的绝对值不超过1",判断是否为平衡二叉树。其中,创建并调用"判断树的深度的函数"。
代码实现:
# _*_ coding:utf-8 _*_
# class TreeNode:
# def __init__(self,x):
# self.val = x
# self.left = None
# self.right = None
class Solution:
def IsBalanced_Solution(self,pRoot):
if pRoot == None:
return True
if abs(self.TreeDepth(pRoot.left) - self.TreeDepth(pRoot.right)) > 1:
return False
return self.IsBalanced_Solution(pRoot.left) and self.IsBalanced_Solution(pRoot.right)
def TreeDepth(self,pRoot):
if pRoot == None:
return 0
nLeft = self.TreeDepth(pRoot.left)
nRight = self.TreeDepth(pRoot.right)
return max(nLeft,nRight) + 1