zoukankan      html  css  js  c++  java
  • 每日一题力扣110 平衡二叉树

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

    本题中,一棵高度平衡二叉树定义为:

    一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1 。

    把递归就当作三个节点,左 根 右。这层递归里要做的事情就是找到最大高度,找最大高度就是左子树算完最大高度,右子树也算完最大高度,然后+1即可。所以就是右max(height(左),height(右))+1的存在。

    得到了该根节点的最大高度之后,还要左右子树的最大高度相减必须小于等于1才是平衡二叉树;不仅当前根节点要满足这个条件,这棵树中的所有根节点都必须满足平衡二叉树,所以就有最后一行两个and的存在

    class Solution:
        def isBalanced(self, root: TreeNode) -> bool:
            #递归要关心的事:
            #1.终止条件:肯定是节点为空
            #2.返回值是什么,是节点的最大高度
            #3.本级递归要做什么:要找到子树的最大高度
            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)#左右子树都需要是平衡二叉树,并且root要左右子树相减小于等于1
  • 相关阅读:
    Node-MySQL 官方文档
    ES6对象的扩展
    async 函数的含义和用法
    express如何使用session与cookie
    uni-app 事件
    uni-app 生命周期
    uni-app 底部导航栏
    用于多扩展目标跟踪的线性时间联合概率数据关联
    基于随机超曲面模型的扩展目标跟踪
    18用于大型程序的工具之多重继承与虚继承
  • 原文地址:https://www.cnblogs.com/liuxiangyan/p/14693047.html
Copyright © 2011-2022 走看看