Python|递归法判断平衡二叉树

Posted 算法与编程之美

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python|递归法判断平衡二叉树相关的知识,希望对你有一定的参考价值。

本文首发于微信公众号:"算法与编程之美",欢迎关注,及时了解更多此系列文章。

问题描述

给定一个二叉树,判断它是否是高度平衡的二叉树。

本题中,一棵高度平衡二叉树定义为:一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1 。

输入:root = [3, 9, 20, null, null,15, 7]

root = [1, 2, 2, 3, 3, null,null, 4, 4]

root = []

输出:true

     false 

     true

解决方案

首先要先知道平衡二叉树的是什么,二叉树是数据结构中由n个结点组成的有限集合,二叉树是有序树,有左右两子树;平衡二叉树就是二叉树的每个结点的高度差不会超过1并且只会在(-1,0,1)三个范围中的二叉树,所以在判断时可以使用递归的方式去判断是否为平衡二叉树,递归的方式可以是自上而下或者自下而上,这里使用的是自上而下。先定义一个新的函数,将节点分为空与非空,然后对二叉树进行遍历,计算左右子树的高度,如果左右子树的高度差在范围内,就分别递归左右子节点进行判断是否平衡。因为本题是在力扣上做的,前两行的定义函数是力扣自动生成的,但是后面的需要更换函数就可以在pychram上运行。

代码中的root是二叉树的根节点,left与right是左右子树

结语

要解决本题需要学习数据结构中的二叉树的相关知识,包括先中后序遍历等对二叉树的变换以及应用,本文的代码也比较难懂,也要对函数有基础使用方法。本次就是用到的递归的方式来解决这个问题。

附件

class Solution:

    def isBalanced(self, root: TreeNode) -> bool:

        def height (root:TreeNode)-> int:

            if not root:

                return 0

            return max(height(root.left),height(root.right)) + 1

 

        if not root:

            return True

        return abs(height(root.left)-height(root.right)) <= 1 and self.isBalanced(root.left) and self.isBalanced(root.right)

实习编辑:衡辉

稿件来源:深度学习与文旅应用实验室(DLETA)

以上是关于Python|递归法判断平衡二叉树的主要内容,如果未能解决你的问题,请参考以下文章

剑指Offer-- 平衡二叉树

二叉树——判断一棵树是否是平衡二叉树

平衡二叉树

判断二叉树是否为平衡二叉树

[数据结构4.8]平衡二叉树

剑指offer系列43---判断平衡二叉树