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