算法题 19 二叉平衡树检查 牛客网 CC150

算法题 19 二叉平衡树检查 牛客网 CC150

实现一个函数,检查二叉树是否平衡,平衡的定义如下,对于树中的任意一个结点,其两颗子树的高度差不超过1。

给定指向树根结点的指针TreeNode* root,请返回一个bool,代表这棵树是否平衡。

解题代码:时间复杂度为O(NlogN) N为树中的节点数

# -*- coding:utf-8 -*-
# class TreeNode:
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = None
class Balance:
    def isBalance(self, root):
        # write code here
        if not root:
            return True
        heightDiff=self.getHeight(root.left)-self.getHeight(root.right)
        if abs(heightDiff)>1:
            return False
        else:
            return self.isBalance(root.left) and self.isBalance(root.right)
        
    def getHeight(self,root):
        if not root:
            return 0
        return max(self.getHeight(root.left),self.getHeight(root.right))+1

 

解题代码二:优化版,时间复杂度为O(N),空间复杂度为O(H),H为树的高度

# -*- coding:utf-8 -*-
# class TreeNode:
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = None
class Balance:
    def isBalance(self, root):
        # write code here
        if self.checkHeight(root)==-1:
            return False
        else:
            return True

    def checkHeight(self,root):
        if not root:
            return 0 #高度为0
        leftHeight=self.checkHeight(root.left)
        if leftHeight==-1:
            return -1 # 不平衡
        
        rightHeight=self.checkHeight(root.right)
        if rightHeight==-1:
            return -1 # 不平衡
        heightDiff=leftHeight-rightHeight
        if abs(heightDiff)>1:
            return -1
        else:
            return max(leftHeight,rightHeight)+1

 

posted @ 2018-07-20 19:09  Fintech带你飞  阅读(304)  评论(0编辑  收藏  举报