法一:遍历每一个点,判断左右子树是否为平衡树 存在大量重复高度的计算,可优化
# -*- coding:utf-8 -*-
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution:
def IsBalanced_Solution(self, pRoot):
# write code here
# 从根节点开始求树深
if pRoot is None:return True
left=self.get_deepth(pRoot.left)
right=self.get_deepth(pRoot.right)
if abs(left-right)<2:return self.IsBalanced_Solution(pRoot.left)and self.IsBalanced_Solution(pRoot.right)
else:return False
#求树深
def get_deepth(self,pRoot):
if pRoot is None:return 0
left=self.get_deepth(pRoot.left)
right=self.get_deepth(pRoot.right)
return max(left,right)+1
法二:对法一进行减枝,当递归时发现已经存在不平衡情况时,不在继续向下递归。设置全局变量boolean进行标记
# -*- coding:utf-8 -*-
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution:
res=True
def IsBalanced_Solution(self, pRoot):
# write code here
if pRoot is None:return True
self.get_deepth(pRoot)
return self.res
#求树深
def get_deepth(self,pRoot):
if pRoot is None:return 0
# 若已经存在非平衡的情况,不再向下递归,返回0 剪纸
if not self.res:return 0
left=1+self.get_deepth(pRoot.left)
right=1+self.get_deepth(pRoot.right)
if abs(left-right)>1:
self.res=False
return max(left,right)