📜  门| GATE-CS-2000 |第 38 题(1)

📅  最后修改于: 2023-12-03 14:58:24.276000             🧑  作者: Mango

题目介绍

该题目是GATE-CS-2000考题中的第38题。它是一道关于数据结构的题目,主要考察了二叉搜索树的基本操作和平衡二叉树的概念。

题目描述

在这道题目中,给定一个二叉搜索树(BST),你需要实现一个函数,判断这个BST是否是平衡二叉树。

BST是一种满足如下条件的二叉树:

  1. 左子树中所有节点的值都小于它的根节点的值

  2. 右子树中所有节点的值都大于它的根节点的值

  3. 左右子树都是BST

平衡二叉树是一种二叉树,其中任意节点的两棵子树的高度差不超过1。也就是说,二叉树的左右子树高度差的绝对值不超过1。

解题思路

我们可以通过递归实现这个函数。首先,我们需要判断当前节点的左右子树的高度是否平衡,如果不平衡则返回false;如果平衡,则继续递归处理左右子节点,判断它们是否是平衡的BST。

具体来说,我们可以实现一个递归函数,计算出当前节点的左右子树的高度,然后判断它们的高度差是否不超过1,如果超过了1,则返回false。如果左右子树都是平衡的BST,则返回true。

def is_balanced_bst(root):
    if root is None:
        return True
    left_height = get_height(root.left)
    right_height = get_height(root.right)
    if abs(left_height - right_height) > 1:
        return False
    return is_balanced_bst(root.left) and is_balanced_bst(root.right)

def get_height(node):
    if node is None:
        return 0
    return max(get_height(node.left), get_height(node.right)) + 1

总结

该题目主要考察了二叉搜索树和平衡二叉树的概念,以及如何通过递归实现对二叉树的遍历和判断。对于程序员来说,这道题目是一个不错的练习题目,可以帮助加深对数据结构的理解和应用。