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.
这道题目在CC150上面也有。做法是先定义一个depth 计算每个点的depth.当任意两个leaf 的深度差大于1时候就返回false:
The definition of balanced binary tree is any two leaves depth's difference is not greater than 1. so we need to define a function to recursively find the depth of nodes and then recursively compare the depth.
the time complexity is O(n)
# Definition for a binary tree node
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution:
# @param root, a tree node
# @return a boolean
def depth(self,root):
if root==None:
return 0
if root.left==None and root.right==None:
return 1
if root.left==None:
return self.depth(root.right)+1
if root.right==None:
return self.depth(root.left)+1
return max(self.depth(root.left),self.depth(root.right))+1
def isBalanced(self, root):
if root==None:
return True
if abs(self.depth(root.left) - self.depth(root.right))>1:
return False
else:
return self.isBalanced(root.left) and self.isBalanced(root.right)