算法,写代码

[easy+][Tree]110.Balanced Binary

2017-11-08  本文已影响0人  小双2510

原题是:

每一个节点的左右子树的深度差,不超过1.
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.

思路是:

这个题与前面所刷的树的递归问题的一点区别在于:
当前节点要判断是否平衡,除了需要知道它的左右子节点是否平衡外,还要知道左右子树各自的最大高度,所以就需要一个额外的helper函数把递归的上一“层次” 计算所得到的子树的高度,带入下一层次。
两个方法:要么作为传入的参数,要么作为函数的返回值。

迭代问题,要把每一层次的结算统一起来。

一种把信息从树的下层,带到上的感觉。每个节点得到的消息是,我的子节点都是True,且我的子树的高度是多少。最后要得到的是根节点上是否是true。
在每个节点上,统一了计算。

代码是:

# 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 isBalanced(self, root):
        """
        :type root: TreeNode
        :rtype: bool
        """
        TorF,val = self.helper(root)
        return TorF
        
        
    def helper(self,root):
        if root == None:
            return True,0
       
        LeftTorF , Lheight = self.helper(root.left)
        RightTorF, Rheight = self.helper(root.right)
        
        if LeftTorF and RightTorF and abs(Lheight - Rheight) <= 1:
            return True, max(Lheight,Rheight)+1

        return False,0 

复习一下height和depth:


Screen Shot 2017-11-08 at 8.39.34 AM.png Screen Shot 2017-11-08 at 8.38.31 AM.png
上一篇下一篇

猜你喜欢

热点阅读