题目描述
输入一棵二叉树,判断该二叉树是否是平衡二叉树
平衡二叉树
定义:它是一棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。
举例:
判断二叉树是否为平衡二叉树
例1:
E
/ \
A D
/ \
B C
例2:
E
/
A
/ \
B C
例3:
E
/ \
A D
/ \ \
B C F
\
G
例1是平衡二叉树,满足平衡二叉树的定义。E的左子树深度为3,E的右子树深度为2,并且左右子树都是平衡二叉树。
例2不是平衡二叉树,E的左子树深度为3,E的右子树深度为1。
例3不是平衡二叉树,E的右子树不是平衡二叉树。
Python实现
# -*- coding: utf-8 -*-
"""
判断二叉树
E
/ \
A D
/ \ \
B C F
\
G
"""
class TreeNode:
def __init__(self, x):
self.val = x
self.left = None
self.right = None
class Solution:
def isbanlance(self, p):
if p is None:
return True
left = self.depth(p.left)
right = self.depth(p.right)
return abs(left - right) <= 1 and self.isbanlance(p.left) and self.isbanlance(p.right)
def depth(self, p):
if p is None:
return 0
return 1 + max(self.depth(p.left), self.depth(p.right))
if __name__ == '__main__':
a = TreeNode("A")
b = TreeNode("B")
c = TreeNode("C")
d = TreeNode("D")
e = TreeNode("E")
f = TreeNode("F")
g = TreeNode("G")
root = e
e.left = a
e.right = d
a.left = b
a.right = c
d.right = f
f.right = g
s = Solution()
result = s.isbanlance(root)
print(result)
输出结果:False