📜  门| GATE-CS-2016(套装1)|第 65 题(1)

📅  最后修改于: 2023-12-03 15:12:43.320000             🧑  作者: Mango

套装1 第65题介绍

题目描述

一个二叉树被称为高度平衡的二叉树,当且仅当每个节点的左右子树高度差不超过1。给定一个二叉树,确定它是否高度平衡。

函数签名
def is_balanced(self, root: TreeNode) -> bool:
输入
  • root:二叉树的根。一个树节点类型的实例。
输出
  • bool:如果二叉树是高度平衡的,则返回True,否则返回False。
示例
示例1

输入

      3
     / \
    9  20
      /  \
     15   7

输出

True
示例2

输入

      1
     / \
    2   2
   / \
  3   3
 / \
4   4

输出

False
题解

本题的关键在于确定一个二叉树是否高度平衡,具体实现方法可以采用递归、栈等数据结构。

递归方法
def is_balanced(self, root: TreeNode) -> bool:
    def check(root):
        if not root:
            return 0
        left = check(root.left)
        if left == -1:
            return -1
        right = check(root.right)
        if right == -1:
            return -1
        return max(left, right) + 1 if abs(left - right) <= 1 else -1

    return check(root) != -1

解释

check 函数中,首先判断当前节点是否为Null,如果是,则返回0,表示该节点的高度为0。然后对当前节点的左右子树递归调用 check 函数,得到左右子树节点的高度,如果左右子树高度差大于1,则返回 -1,表示该二叉树不是高度平衡的。最后,如果当前子树是高度平衡的,则返回该子树的高度即可。

is_balanced 函数中,通过调用 check 函数来判断给定的二叉树是否高度平衡。如果 check 函数返回的结果不是 -1,则说明给定的二叉树是高度平衡的。如果返回 -1,则说明给定的二叉树不是高度平衡的。

时间复杂度

递归的时间复杂度为 O(N),其中 N 是二叉树的节点数。

总结

本题可以通过递归,栈等数据结构实现,采用递归方法比较简单,时间复杂度也相对较小。