leetcode_110. Balanced Binary Tree 判断一棵二叉树是否为平衡二叉树

来源:互联网 发布:河南豫广网络有线电视 编辑:程序博客网 时间:2024/05/13 12:12

题目:

Given a binary tree, determine if it is height-balanced.

For this problem, a height-balanced binary tree is defined as a binary tree in which the depth of the two subtrees of every node never differ by more than 1.


题意:

给定一棵二叉树,判断它是否为平衡二叉树。 平衡二叉树的定义是,它的每个节点的左右子树高度差不超过1


代码:

# Definition for a binary tree node.
# class TreeNode(object):
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = None


class Solution(object):
    
    def GetTreeDeepth(self, root):               #计算二叉树的深度
        """
        :type root: TreeNode
        :rtype: bool
        """
        
        if root == None :                           
            return 0                            #此处的return为递归的出口
        return 1 + max(self.GetTreeDeepth(root.left),  self.GetTreeDeepth(root.right))           #此处的递归为递归的迭代
    
    def isBalanced(self, root):
        """
        :type root: TreeNode
        :rtype: bool
        """
        
        if root == None :
            return True
        else :
            leftdeep = self.GetTreeDeepth(root.left)
            rightdeep = self.GetTreeDeepth(root.right)
            if leftdeep - rightdeep > 1 or rightdeep - leftdeep > 1 :              #从根节点往下判断,如果左右子树高度超过了1,则直接返回false
                return False                                    #此处的return为递归的出口,到达此处是需要满足条件的
            else :
                return self.isBalanced(root.left) and self.isBalanced(root.right)                    #此处的return为递归判断,运用递归出口返回的结果


笔记:

更高级的算法,见http://blog.csdn.net/feliciafay/article/details/18348065


0 0