题目:输入一棵二叉树,判断该二叉树是否是平衡二叉树。
牛客网:链接
平衡二叉搜索树(Self-balancing binary search tree)又被称为AVL树(有别于AVL算法),且具有以下性质:它是一 棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。
利用38题二叉树的深度求解。按照平衡二叉树的定义,有两点需要注意:1,每个节点的两个子树也都是平衡二叉树;2,每个节点的两个子树的高度差不超过1。
直接的思路是:遍历每个节点,判断每个节点的两个子树高度差是否小于等于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.getDepth(pRoot.left) - self.getDepth(pRoot.right)) > 1:
return False
return self.IsBalanced_Solution(pRoot.left) and self.IsBalanced_Solution(pRoot.right)
def getDepth(self, root):
if root == None:
return 0
return 1 + max(self.getDepth(root.left), self.getDepth(root.right))