【剑指offer】 平衡二叉树(python)

相关知识点:

一棵树是平衡二叉树,必须满足两个条件:

1、该二叉树首先是二叉搜索树,即当前节点的值大于左节点的值,并且当前节点的值大于右节点的值。

2、左子树和右子树的高度差的绝对值不大于1。

解题思路:

通过两个内置函数对二叉树进行判定,判断是否满足上述两个条件。

下面是示例代码:

# -*- coding:utf-8 -*-
'''
平衡二叉树:
1、左子树和右子树的高度差的绝对值不大于1
2、满足搜索树的条件

python可以返回一个或多个参数,但是
在一个函数中,必须设置python返回的
参数数目相同。


'''
# class TreeNode:
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = None
class Solution:
    def IsBalanced_Solution(self, pRoot):
        # write code here
        if pRoot == None:
            return True
        # 判断二叉树是否是搜索树
        def Is_SearchTree(pRoot):
            if pRoot.left != None and pRoot.val > pRoot.left.val:
                return False
            if pRoot.right != None and pRoot.val < pRoot.right.val:
                return False
        # 判断搜索树是否是平衡树
        def calc_height(pRoot):
            # 初始条件应该为判断为空,返回0
            if pRoot == None:
                return 0
            Is_SearchTree(pRoot)
            L = calc_height(pRoot.left)
            R = calc_height(pRoot.right)
            return max(L, R) + 1
        # 增加求绝对值的操作
        margin = abs(calc_height(pRoot.left) - calc_height(pRoot.right))
        if margin > 1:
            return False
        # 递归对当前节点的左右子树进行判断,判定是否为平衡二叉树
        return self.IsBalanced_Solution(pRoot.left) and self.IsBalanced_Solution(pRoot.right)        
            

 

全部评论

相关推荐

10-17 16:07
门头沟学院 Java
牛牛大你18号:在汇报,突然弹出来,,领导以为我在准备跳槽,刚从领导办公室谈心出来
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务