Leetcode 110:平衡二叉树

在这里插入图片描述
想法:
我们可以由下至上检查这个二叉树。我们可以创建一个list记录每一个节点是否平衡以及它的高度,例如[balanced, height],就这样用递归的方法检查每一个节点。

代码:

# 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:
        def dfs(root):
            #如果没有根,证明是平衡,返回True。
            if not root: return [True, 0]
            
            #用递归的方法遍历左节点和右节点。
            left, right = dfs(root.left), dfs(root.right)
            
            #判断一个根是否平衡:
            #1. 判断这个根的左节点和右节点是否都平衡。
            #2. 判断左右节点的高度差是否小于等于1.
            balanced = (left[0] and right[0]) and abs(left[1] - right[1]) <= 1
            
            #返回一个list,记录根是否平衡以及根的高度。
            #根的高度等于根自身(1)加上左右节点的最大高度。
            return [balanced, 1 + max(left[1], right[1])]

        return dfs(root)[0]
    
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值