📅  最后修改于: 2023-12-03 14:55:44.214000             🧑  作者: Mango
二叉搜索树(Binary Search Tree, BST)是一种常见的二叉树结构,它具备以下性质:
在实际开发中,我们经常需要判断给定的二叉树是否满足BST的性质。简单有效的方法是通过遍历二叉树,判断每个节点的值是否满足BST的规则。
以下是一个使用递归进行检查的示例代码片段:
class TreeNode:
def __init__(self, val=0, left=None, right=None):
self.val = val
self.left = left
self.right = right
def is_bst(root):
return is_bst_helper(root, float('-inf'), float('inf'))
def is_bst_helper(node, lower, upper):
if node is None:
return True
if node.val <= lower or node.val >= upper:
return False
return is_bst_helper(node.left, lower, node.val) and is_bst_helper(node.right, node.val, upper)
代码中使用了一个辅助函数 is_bst_helper
,它接收当前节点以及其允许的最小值(lower
)和最大值(upper
)作为参数。在遍历到每个节点时,我们检查其值是否在允许范围内,并递归地检查左右子树。如果遇到任何一个节点的值不满足BST的规则,就返回 False
,否则整个二叉树都是BST。
这种方法的时间复杂度为O(n),其中n为二叉树中节点的总数,因为我们需要遍历每个节点。空间复杂度为O(n),因为在最坏情况下,递归栈的深度将是n,即二叉树的高度。
除了递归的方式,我们还可以使用迭代的方式进行验证。这种方法使用栈来模拟递归的过程,稍微复杂一些,但也可以实现相同的功能。
希望以上代码片段和解释对您有帮助!