📅  最后修改于: 2023-12-03 15:12:40.631000             🧑  作者: Mango
这是一道关于递归的问题,涉及到判断一个二叉树是否为BST的问题。
给定一个二叉树,判断其是否为二叉搜索树(BST)。
BST的定义为:所有节点的左子树中的值小于此节点的值,而其右子树中的值大于此节点的值,并且每个子树必须也是BST。
例如,以下二叉树为BST:
4
/ \
2 5
/ \
1 3
而以下则不是:
5
/ \
1 4
/ \
3 6
一般而言,我们判断一个二叉树是否为BST,需要满足以下两个条件:
我们可以通过递归来实现对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
为二叉树节点的定义,而low
和high
分别代表当前节点的上下限值。如果发现当前节点的值不在上下限之间,则返回False
。
本节中,我们学习了如何通过递归判断一个二叉树是否为BST。这是一个非常经典的算法问题,需要熟练掌握。