python--lintcode93. 平衡二叉树

给定一个二叉树,确定它是高度平衡的。对于这个问题,一棵高度平衡的二叉树的定义是:一棵二叉树中每个节点的两个子树的深度相差不会超过1。 

样例

给出二叉树 A={3,9,20,#,#,15,7}, B={3,#,20,15,7}

A)  3            B)    3 
   / \                  \
  9  20                 20
    /  \                / \
   15   7              15  7

二叉树A是高度平衡的二叉树,但是B不是

这一题的解决方法依赖于上一题,上一题请看我上一篇博客:https://blog.csdn.net/wenqiwenqi123/article/details/79951291

依然采用分治法的思想,若一棵树的左右子树都是平衡二叉树,那么这棵树一定是平衡二叉树。

以及只要求出左右子树的深度就可以判断出这棵树是不是平衡二叉树了。

代码如下:

class TreeNode:
    def __init__(self, val):
        self.val = val
        self.left, self.right = None, None


class Solution:
    """
       @param root: The root of binary tree.
       @return: True if this Binary tree is Balanced, or false.
       """
    def isBalanced(self, root):
        def find(root):   #求出树的深度
            if (root is None): return 0
            left = find(root.left)
            right = find(root.right)
            if (left > right):
                return left + 1
            else:
                return right + 1

        def decide(root):   #判断是否是平衡二叉树
            if(root is None):return True
            leftDepth=find(root.left)
            rightDepth=find(root.right)
            if(abs(leftDepth-rightDepth)>1):return False
            left=decide(root.left)
            right=decide(root.right)
            if(left==False or right==False):
                return False
            return True

        result=decide(root)
        return result



Tree = TreeNode(2)
Tree.left = TreeNode(1)
aa=Tree.right = TreeNode(3)
aa.right=TreeNode(4)
aa.right.right=TreeNode(5)
s = Solution()
print(s.isBalanced(Tree))


阅读更多

没有更多推荐了,返回首页