判断是否为平衡二叉树

题目描述

输入一棵二叉树,判断该二叉树是否是平衡二叉树

平衡二叉树

定义:它是一棵空树或它的左右两个子树的高度差的绝对值不超过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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值