JZ79 判断是不是平衡二叉树
思路:很显然对于每个树的结点求左右子树的高度,先计算他们的差值,若大于1,就不是平衡二叉树,否则就是平衡二叉树。代码如下:
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution:
def IsBalanced_Solution(self , pRoot: TreeNode) -> bool:
# write code
if pRoot==None: return True
if abs(self.Deepth(pRoot.left) - self.Deepth(pRoot.right)) > 1:
return False
else:
return self.IsBalanced_Solution(pRoot.left) and self.IsBalanced_Solution(pRoot.right)
def Deepth(self, pRoot:TreeNode) -> int:
if pRoot==None: return 0
else : return max(self.Deepth(pRoot.left),self.Deepth(pRoot.right))+1
但这种方法在遍历每个结点时,求父节点的深度时会也求子节点的深度,因此会计算两次子节点的深度,所以我们进行了剪枝,若子树不为平衡二叉树,则直接输出False。
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution:
def IsBalanced_Solution(self , pRoot: TreeNode) -> bool:
if pRoot==None: return True
if abs(self.Deepth(pRoot.left) - self.Deepth(pRoot.right)) > 1:
return False
else:
return self.IsBalanced_Solution(pRoot.left) and self.IsBalanced_Solution(pRoot.right)
def Deepth(self, pRoot:TreeNode) -> int:
if pRoot==None: return 0
left_deepth = self.Deepth(pRoot.left)
right_deepth = self.Deepth(pRoot.right)
if abs(left_deepth-right_deepth) > 1:
return -99
else : return max(left_deepth,right_deepth)+1