设计算法判定一棵二叉树是否为二叉排序树。请用完整的C++代码实现此题
时间: 2024-12-20 11:28:06 浏览: 23
判断一棵二叉树是否为二叉排序树(BST),即每个节点的值大于左子树中所有节点的值,并小于右子树中所有节点的值,可以使用递归的方式。下面是一个完整的C++实现:
```cpp
#include <iostream>
using namespace std;
// 定义二叉树节点结构
struct TreeNode {
int val;
TreeNode* left;
TreeNode* right;
TreeNode(int x) : val(x), left(NULL), right(NULL) {}
};
// 辅助函数用于比较当前节点和其子树的值
bool isValidBST(TreeNode* root) {
if (!root) return true; // 空树视为有效BST
// 递归检查左子树
if (!isValidBST(root->left)) {
return false;
}
// 如果左子树存在并且当前节点的值小于左子树的最大值,说明不符合BST条件
if (root->left && root->val <= root->left->val) {
return false;
}
// 递归检查右子树
if (!isValidBST(root->right)) {
return false;
}
// 如果右子树存在并且当前节点的值大于右子树的最小值,说明不符合BST条件
if (root->right && root->val >= root->right->val) {
return false;
}
// 如果以上都满足,说明当前节点及其子树构成有效的BST
return true;
}
int main() {
// 测试实例
TreeNode* root = new TreeNode(4);
root->left = new TreeNode(2);
root->right = new TreeNode(6);
root->left->left = new TreeNode(1);
root->left->right = new TreeNode(3);
root->right->right = new TreeNode(7);
if (isValidBST(root)) {
cout << "The tree is a Binary Search Tree." << endl;
} else {
cout << "The tree is not a Binary Search Tree." << endl;
}
return 0;
}
阅读全文