判断一棵树是否为二叉排序树

要判断一棵树是否为二叉排序树(BST),我们可以利用中序遍历的性质,因为BST的中序遍历结果是一个递增序列。下面是一个简洁的算法来判断一个树是否为BST:
1. 初始化一个变量`last`为负无穷大,用来记录中序遍历过程中的前一个节点的值。
2. 定义一个递归函数`isBST`,该函数接受树的根节点`p`作为参数。
3. 在`isBST`函数中:
如果`p`为空,返回`true`,因为空树是BST。
如果`p`的左子树为空且`p`的右子树为空,返回`true`,因为空子树不影响BST的性质。
如果`p`的左子树为空但`p`的右子树不为空,或者`p`的左子树不为空但`p`的右子树为空,返回`false`,因为BST的左右子树都必须是BST。
如果`p`的左子树不为空,递归调用`isBST`函数检查左子树,并将结果存储在`flag1`中。如果`p`的值小于等于`last`或者`flag1`为`false`,则返回`false`。
如果`p`的右子树不为空,递归调用`isBST`函数检查右子树,并将结果存储在`flag2`中。如果`p`的值大于`last`或者`flag2`为`false`,则返回`false`。
最后,返回`flag2`的值。
这个算法利用了BST的性质,并通过递归检查每个节点是否满足BST的条件。需要注意的是,这个算法假设树中的所有值都是可比较的,并且树中的每个节点都有一个值。
其他小伙伴的相似问题:
如何判断一棵树是否为二叉排序树?
如何通过中序遍历判断树是BST?
二叉排序树的应用场景有哪些?



