剑指offer:平衡二叉树(Python)

题目描述

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

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

解题思路

  1. 刚做完求二叉树的深度,这道“判断是否为平衡二叉树”的解法刚好可以用“求二叉树的深度”的思路来做。
  2. 从下到上(从底到顶),分别判断某节点的左右子树是否为平衡二叉树,即根据该结点的左右子树高度差判断是否平衡。

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
    原文作者:平衡二叉树
    原文地址: https://blog.csdn.net/u010005281/article/details/79718391
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞