📜  门| GATE-CS-2003 |问题 9(1)

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

门 | GATE-CS-2003 |问题 9

这是一道关于递归的问题,涉及到判断一个二叉树是否为BST的问题。

问题描述

给定一个二叉树,判断其是否为二叉搜索树(BST)。

BST的定义为:所有节点的左子树中的值小于此节点的值,而其右子树中的值大于此节点的值,并且每个子树必须也是BST。

示例

例如,以下二叉树为BST:

    4
   / \
  2   5
 / \
1   3

而以下则不是:

    5
   / \
  1   4
     / \
    3   6
解决方案

一般而言,我们判断一个二叉树是否为BST,需要满足以下两个条件:

  1. 左子树必须小于当前节点;
  2. 右子树必须大于当前节点。

我们可以通过递归来实现对BST的判断。具体来说,我们从根节点开始,将根节点的值作为当前节点的上下限值,分别向左右子树分别递归判断即可。

具体实现见以下代码:

def is_valid_bst(node: TreeNode, low: int=float('-inf'), high: int=float('inf')) -> bool:
    if not node:
        return True
    if node.val <= low or node.val >= high:
        return False
    return is_valid_bst(node.left, low, node.val) and is_valid_bst(node.right, node.val, high)

其中,TreeNode为二叉树节点的定义,而lowhigh分别代表当前节点的上下限值。如果发现当前节点的值不在上下限之间,则返回False

总结

本节中,我们学习了如何通过递归判断一个二叉树是否为BST。这是一个非常经典的算法问题,需要熟练掌握。