题目
有一棵二叉树,请设计一个算法判断这棵二叉树是否为平衡二叉树。
给定二叉树的根结点root,请返回一个bool值,代表这棵树是否为平衡二叉树。
思路
递归,判断每个节点左右子树是否为AVL树,同时获取左右子树的高度。
代码
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class CheckBalance:
def recur(self, root):
if not root:
return True, 0
left_flag, left_depth = self.recur(root.left)
right_flag, right_depth = self.recur(root.right)
depth = max(left_depth, right_depth) + 1
if not left_flag or not right_flag:
return False, depth
if abs(left_depth - right_depth) <= 1:
return True, depth
return False, depth
def check(self, root):
# write code here
res, depth = self.recur(root)
return res