leetcode学习笔记(110. 平衡二叉树)

107 阅读2分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

本题考察树相关知识,为中等题110. 平衡二叉树

110. 平衡二叉树

给定一个二叉树,判断它是否是高度平衡的二叉树。本题中,一棵高度平衡二叉树定义为 一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 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

提示:

树中的节点数在范围 [0, 5000] 内 -104 <= Node.val <= 104

递归法

# 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: TreeNode) -> bool:
        if self.gethight(root) == -1:
            return False
        else:
            return True
        

    def gethight(self,root):
        if not root:
            return 0

        left = self.gethight(root.left)
        right = self.gethight(root.right)
        if left == -1 or right == -1:
            return -1
        if right - left > 1 or right - left < -1:
            return -1
        
        
        return 1 + max(left, right)

解析

难度脱节了,这个题的出现好突兀啊,一直是很简单的数列题,突然出现一个树的遍历。虽然是一个中等题但是我感觉还挺难的呢,可能是因为小白对于一切专业数据结构相关的东西都感到惧怕和陌生吧
用递归来写
具体方法:
1.定义一个函数得到左右子树的高度差
2.如果找到了叶节返回0,依次向上,如果right和left的差绝对值大于1,则返回-1,小于1则返回1 + max(left, right)作为这个子树到此节点的最大深度
3.依次向上直到根节点,此时为-1则存在高度差大于1的子树,这个树不是平衡二叉树,如果不是-1则这个树不存在高度差大于1的子树,它是平衡二叉树
4.根据结果返回Ture或者False即可

来源:力扣(LeetCode)
链接:leetcode-cn.com/problems/ba…