📅  最后修改于: 2023-12-03 15:40:32.372000             🧑  作者: Mango
在二叉树中,一棵二叉树可以是二叉查找树(Binary Search Tree,BST)的前提是每个节点的键值大于其左子树中的任何节点的键值,且小于其右子树中的任何节点的键值。
如果您想要检查一个二叉树是否为 BST,下面是使用迭代方法的一种方式。
def is_bst_iterative(root):
if root is None:
return True
stack = []
prev_val = -sys.maxsize - 1
while root or stack:
while root:
stack.append(root)
root = root.left
root = stack.pop()
if root.val <= prev_val:
return False
prev_val = root.val
root = root.right
return True
该函数的参数 root
是根节点。
函数中,首先判断了根节点是否为空,如果为空,则该二叉树是 BST,返回 True
。
接着,我们创建一个空的列表 stack
用于存放树中待处理的节点。并初始化 prev_val
,该变量将在迭代过程中用于存储前一个节点的值。
接下来,进入了一个循环,只有当根节点为空且 stack
也为空时才会退出循环。
在循环内部,我们首先将根节点入栈,并将指针 root
移向左子树,一直到最左边的叶节点。这是因为在 BST 中,左子树中的所有节点的键值都小于其根节点的键值,我们需要逐步比较所有的左子树节点。当到达最左叶节点时,就开始了回溯过程。
我们将弹出栈中的一个节点,并将其键值与 prev_val
比较,如果小于等于 prev_val
,则该二叉树不是 BST,直接返回 False
;否则,将该节点的键值作为 prev_val
的新值,并将指针 root
指向当前节点的右子树节点(如果存在的话)。
循环结束后,如果没有返回 False
,则该二叉树是 BST,返回 True
。
这是一种使用迭代方法检查二叉树是否为 BST 的方法。其他方法包括使用递归、中序遍历等。