C++编写程序 设计一个判别给定二叉树是否为二叉排序树的算法
时间: 2025-01-05 09:38:59 浏览: 9
在C++中编写一个判断给定二叉树是否为二叉排序树(Binary Search Tree, BST)的算法,我们需要考虑BST的基本特性:对于每个节点,其左子树的所有节点值都小于该节点,而右子树的所有节点值都大于该节点。下面是一个递归算法的例子:
```cpp
struct TreeNode {
int val;
TreeNode *left;
TreeNode *right;
TreeNode(int x) : val(x), left(NULL), right(NULL) {}
};
bool isBST(TreeNode* root) {
return helper(root, INT_MIN, INT_MAX);
}
bool helper(TreeNode* node, int min, int max) {
if (node == nullptr) {
return true; // 空节点视为满足条件
}
if (node->val < min || node->val > max) {
return false; // 节点值不在指定范围内,不符合BST条件
}
if (!helper(node->left, min, node->val)) {
return false; // 左子树不满足BST条件
}
if (!helper(node->right, node->val, max)) {
return false; // 右子树不满足BST条件
}
return true;
}
```
这个`isBST`函数首先调用辅助函数`helper`,它检查当前节点值是否在最小值(min)到最大值(max)之间,并递归地检查左右子树是否也是有效的BST。
阅读全文