《剑指offer》平衡二叉树

本题来自《剑指offer》 平衡二叉树

题目:

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

思路:

   平衡二叉树的定义:任意节点的左右子树的深度相差不超过1,那么就是一颗平衡二叉树。

  采用递归的方式调用,得到左右子树的深度,两者之间的差度不超过1,则就是,否则不是。

Python Code:

# -*- 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 not pRoot:                       #空数为平衡二叉树
            return True
        left = self.TreeDepth(pRoot.left)   #得到左子树的高度
        right = self.TreeDepth(pRoot.right) #得到右子树的高度
        if abs(left - right) > 1:           #比较左右子树的高度差
            return False                    #若大于1,就不是平衡二叉树
                                            #再递归调用左右子树,也是平衡二叉树,用and
        return self.IsBalanced_Solution(pRoot.left) and self.IsBalanced_Solution(pRoot.right)
                                            #函数,返回其树的深度
    def TreeDepth(self,pRoot):
        if not pRoot:                       #如果为空节点就返回0
            return 0
        left = self.TreeDepth(pRoot.left)   #得到左子树的高度
        right = self.TreeDepth(pRoot.right) #得到右子树的高度
        return max(left+1,right+1)          #返回高度叠加
posted @ 2019-04-28 14:14  weilongyitian  阅读(228)  评论(0编辑  收藏  举报