剑指39-平衡二叉树

题目描述

输入一棵二叉树,判断该二叉树是否是平衡二叉树。

平衡二叉树:它是一棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。


  • 递归,参数是节点,返回节点是否是平衡二叉树的判断,如果是平衡二叉树返回以其为根节点的子树的深度。如下代码用一个返回项来表示返回的状态。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
class Solution:
def IsBalanced_Solution(self, pRoot):
# write code here
def getDepth(root):
# 终止条件
if root is None:
return 0

# 左右节点一旦有一个不是平衡二叉树,就不再处理,直接向上返回-1
leftDepth = getDepth(root.left)
if leftDepth == -1:
return -1
rightDepth = getDepth(root.right)
if rightDepth == -1:
return -1

# 递推式
if abs(leftDepth - rightDepth) > 1:
return -1
else:
return 1 + max(leftDepth, rightDepth)
return getDepth(pRoot) != -1