[LeetCode]110. Balanced Binary Tree

110. Balanced Binary Tree

题意:判断树是否是平衡树,平衡树的定义是任何一个结点的左子树和右子树高度差不超过1;

思路:既然是要求每个结点,那么就要dfs每个结点,然后比较它们的左右子结点的高度差即可。

class Solution(object):
    def isBalanced(self, root):
        """
        :type root: TreeNode
        :rtype: bool
        """
        def getpath(node):
            if not node:
                return 0
            return max(getpath(node.left), getpath(node.right)) + 1
        if not root:
            return True
        left = getpath(root.left)
        right = getpath(root.right)
        return 0 <= abs(left - right) <= 1 and self.isBalanced(root.left) and self.isBalanced(root.right)

看到网上写的比较快的代码,是用一个tuple记录该结点是否平衡以及它的深度,如下:

class Solution(object):
    def checkBalanced(self, root):
        if root == None:
            return True, -1
        (balance_left, depth_left) = self.checkBalanced(root.left)
        if balance_left == False:
            return False, None
        (balance_right, depth_right) = self.checkBalanced(root.right)
        if balance_right == False:
            return False, None       
        if abs(depth_left-depth_right) > 1:
            return False, None
        else:
            return True, max(depth_left,depth_right)+1
    def isBalanced(self, root):
        """
        :type root: TreeNode
        :rtype: bool
        """       
        (balance, depth) = self.checkBalanced(root)
        return balance
posted @ 2017-09-05 19:25  banananana  阅读(122)  评论(0)    收藏  举报