[easy+][Tree]110.Balanced Binary Tree

原题是:

每一个节点的左右子树的深度差,不超过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
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 树的概述 树是一种非常常用的数据结构,树与前面介绍的线性表,栈,队列等线性结构不同,树是一种非线性结构 1.树的定...
    Jack921阅读 4,489评论 1 31
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,973评论 19 139
  • 1 序 2016年6月25日夜,帝都,天下着大雨,拖着行李箱和同学在校门口照了最后一张合照,搬离寝室打车去了提前租...
    RichardJieChen阅读 5,165评论 0 12
  • 本系列导航:剑指offer(第二版)java实现导航帖 面试题1:赋值运算符函数 题目要求:为自定义类添加赋值运算...
    ryderchan阅读 2,883评论 0 2
  • 2017.7.14日日志 今日体验 今天再次慎重的把宣言做了梳理。通过电话沟通了合伙人,搭档,确认了工作上的安排。...
    蓝朵格格阅读 313评论 0 3