leetcode代码记录(平衡二叉树

简介: leetcode代码记录(平衡二叉树

1. 题目:

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

平衡二叉树

示例 1:

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

输出:true

示例 2:

输入:root = [1,2,2,3,3,null,null,4,4]

输出:false

示例 3:

输入:root = []

输出:true

2. 我的代码:

# 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
        def height(node):
            # 终止条件
            if node == None:
                return 0
            # 后序遍历
            left_height = height(node.left)
            right_height = height(node.right)
            if abs(left_height - right_height) > 1 or left_height == -1 or right_height == -1:
                return -1
            return 1 + max(left_height, right_height)

        if height(root) == -1:
            return False
        else:
            return True

检查是否是平衡二叉树,其实就是统计高度,然后做差,查看各个树的所有节点的高度差是否大于1。如果大于1则说明不是平衡二叉树;如果全部节点都满足高度差小于等于1,则说明是平衡二叉树。

因此,我们只需要把计算最大高度的代码修改一下即可,因为都是在求高度。只不过在求得高度后做差abs(left_height - right_height)查看是否满足平衡二叉树条件。这里,我们令如果高度差大于1则返回-1,以-1为记号,不断返回(因为只要有一个节点不满足就能确定这个二叉树一定不是平衡二叉树了)。

简便的写法,可以将判断条件合并,再加上 or left_height == -1 or right_height == -1就可以得知上一个节点是否平衡。其余正常返回树的高度即可,因为还要继续服务于上面的节点判断。

目录
相关文章
|
2月前
【LeetCode 33】110.平衡二叉树
【LeetCode 33】110.平衡二叉树
16 1
|
4月前
|
算法 Java 关系型数据库
leetcode110-平衡二叉树
文章通过LeetCode第110题"平衡二叉树"的解题过程,深入讲解了平衡二叉树的定义、树的高度概念,并提供了使用后序遍历算法判断二叉树是否平衡的Java代码实现,强调了理解理论知识和实践编码的重要性。
|
4月前
|
Python
【Leetcode刷题Python】110. 平衡二叉树
LeetCode第110题"平衡二叉树"的Python解决方案,通过计算二叉树的高度并判断任意两个子树的高度差是否不超过1来确定树是否平衡。
27 2
|
6月前
力扣-2029-石子游戏-‘屎山’代码
力扣-2029-石子游戏-‘屎山’代码
48 3
|
7月前
|
算法
leetcode代码记录(全排列 II
leetcode代码记录(全排列 II
56 4
|
7月前
leetcode代码记录(最长回文子串
leetcode代码记录(最长回文子串
49 2
|
7月前
|
算法
leetcode代码记录(寻找两个正序数组的中位数
leetcode代码记录(寻找两个正序数组的中位数
50 2
|
6月前
|
SQL 算法 数据挖掘
力扣110:平衡二叉树
力扣110:平衡二叉树
|
7月前
|
算法
leetcode代码记录(全排列
leetcode代码记录(全排列
63 1
|
7月前
|
索引
leetcode代码记录(Z 字形变换
leetcode代码记录(Z 字形变换
49 1