判断给定的二叉树是否是二叉排序树
时间: 2024-08-13 14:06:27 浏览: 65
判断一个给定的二叉树是否是二叉排序树(Binary Search Tree,BST)的方法是通过递归遍历树节点并检查每个节点是否满足BST的性质:对于任意节点,其左子树中的所有节点值都小于该节点的值,右子树中的所有节点值都大于该节点的值。
以下是判断过程的步骤:
1. **基线条件**:如果树为空,则它是BST。
2. **递归检查**:对于非空节点,执行以下操作:
- 验证当前节点值是否在其左子树中所有节点值的范围内(如果左子树不为空,且左子树的最大值小于当前节点值)。
- 验证当前节点值是否在其右子树中所有节点值的范围内(如果右子树不为空,且右子树的最小值大于当前节点值)。
- 对左子树和右子树递归应用同样的检查。
**Python伪代码示例:**
```python
def is_bst(node, min_val=None, max_val=None):
if node is None:
return True
# 如果已经验证过当前节点,直接返回
if (min_val is not None and node.val <= min_val) or \
(max_val is not None and node.val >= max_val):
return False
# 如果没有验证过,设置当前节点的范围
min_val = min_val if min_val is not None else float('-inf')
max_val = max_val if max_val is not None else float('inf')
# 递归检查左子树和右子树
return is_bst(node.left, min_val, node.val) and \
is_bst(node.right, node.val, max_val)
# 使用方法
root = ... # 输入二叉树的根节点
if is_bst(root):
print("给定的二叉树是BST")
else:
print("给定的二叉树不是BST")
```
阅读全文