题目描述
输入一棵二叉树,判断该二叉树是否是平衡二叉树。
思路分析
平衡二叉树要求左子树与右子树的高度之差的绝对值不大于1,左、右子树同样满足上述要求。需要在求取二叉树的高度的基础上稍加改动。二叉树的高度通常采用先序遍历的递归方式,递归的输入从根结点开始到左右子树直到叶子结点停止,递归的输出则是从叶子结点开始递归返回子树的高度,直到最后返回整棵树的高度。因此只需要在计算高度后加一个对左右子树高度差的判断即可,判断结果存储在一个全局变量中。
# -*- 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):
global mark
mark = True
self.IsBalanced(pRoot)
return mark
def IsBalanced(self, pRoot):
global mark
if not pRoot:
return 0
left = self.IsBalanced(pRoot.left)
right = self.IsBalanced(pRoot.right)
if abs(left - right) > 1:
mark = False
return max(left, right)+1