【leetcode】判断平衡二叉树

给定一个二叉树,判断它是否是 平衡二叉树

二叉搜索树(BST)

  • 性质:左子树所有节点值 < 根节点值 < 右子树所有节点值

  • 目的:快速查找(O(log n) 在平衡情况下)

  • 不保证平衡

平衡二叉树

  • 性质:每个节点左右子树高度差不超过1

  • 目的:避免树退化成链表,保持操作效率

  • 不保证有序性

python 复制代码
# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
class Solution:
    def isBalanced(self, root: Optional[TreeNode]) -> bool:
        self.res = True
        def helper(root):
            if not root:
                return 0
            left = helper(root.left) + 1
            right = helper(root.right) + 1
            #print(right, left)
            if abs(right - left) > 1: 
                self.res = False
            return max(left, right)
        helper(root)
        return self.res
python 复制代码
class Solution:
    def isBalanced(self, root: Optional[TreeNode]) -> bool:
        def height(root):
            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)
相关推荐
飞Link1 天前
什么是 AirSim?一文读懂无人机仿真平台
python·算法·无人机
曲径海盗1 天前
【Python 学习第 38 天】for 循环
python·学习笔记·编程入门
在世修行1 天前
智学文枢:变式题生成引擎
python·ai·pyside·题目生成
一去不复返的通信er1 天前
贪心算法-合并区间(LeetCode 56)
算法·leetcode·贪心算法
On The Road :1 天前
Java 多线程详解:从入门到线程安全
java·python·安全
岁月宁静1 天前
如何设计支持 Skills 的 Agent?一套可扩展的四层架构
python·agent
Shaoshing1 天前
LeetCode100 49. 字母异位词分组
java·算法
岁月宁静1 天前
CrewAI 快速上手:10 分钟搭建你的第一个 Agent 团队
python·agent
YFJ_mily1 天前
第二届区块链技术与基础模型国际学术会议(BTFM2027)
算法·区块链·能源·智能系统·rdlink研发家·机器人自动化