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就可以得知上一个节点是否平衡。其余正常返回树的高度即可,因为还要继续服务于上面的节点判断。

目录
相关文章
|
5天前
|
机器学习/深度学习
leetcode代码记录(旋转图像
leetcode代码记录(旋转图像
9 0
|
5天前
|
算法
leetcode代码记录(全排列 II
leetcode代码记录(全排列 II
13 4
|
5天前
|
算法
leetcode代码记录(全排列
leetcode代码记录(全排列
12 1
|
5天前
|
索引
leetcode代码记录(Z 字形变换
leetcode代码记录(Z 字形变换
11 1
|
5天前
leetcode代码记录(最长回文子串
leetcode代码记录(最长回文子串
10 2
|
5天前
leetcode代码记录(回文数
leetcode代码记录(回文数
12 1
|
5天前
|
算法
leetcode代码记录(寻找两个正序数组的中位数
leetcode代码记录(寻找两个正序数组的中位数
13 2
|
5天前
leetcode代码记录(两数之和
leetcode代码记录(两数之和
11 1
|
5天前
|
索引
leetcode代码记录(最长公共子序列
leetcode代码记录(最长公共子序列
7 0
|
5天前
|
索引
leetcode代码记录(最长重复子数组
leetcode代码记录(最长重复子数组
12 0