题目描述
输入一棵二叉树,判断该二叉树是否是平衡二叉树。
平衡二叉树:它是一棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。[百度百科]
解题思路
- 刚做完求二叉树的深度,这道“判断是否为平衡二叉树”的解法刚好可以用“求二叉树的深度”的思路来做。
- 从下到上(从底到顶),分别判断某节点的左右子树是否为平衡二叉树,即根据该结点的左右子树高度差判断是否平衡。
Python代码
class Solution:
def IsBalanced_Solution(self, pRoot):
self.flag = True
self.tree_Iteration(pRoot)
return self.flag
def tree_Iteration(self, pRoot):
if not pRoot or self.flag==False:
return 0
left = self.tree_Iteration(pRoot.left)
right = self.tree_Iteration(pRoot.right)
if abs(left-right)>1:
self.flag = False
return left+1 if left>right else right+1
“判断而否为平衡二叉树”和“求二叉树的深度”的代码是如此的相似,以至于当看完“求二叉树的深度”的代码后,本来就不难的“判断而否为平衡二叉树”代码就更是一看就懂了:
对比:求二叉树的深度(Python代码)
def TreeDeep(self, pRoot):
if not pRoot:
return 0
left = self.TreeDeep(pRoot.left)
right = self.TreeDeep(pRoot.right)
return left+1 if left>right else right+1