设计二叉排序树类(BSTree),实现插入结点、构造二叉排序树、输出查找路径、判断是否二叉排序树,4个成员函数。
时间: 2024-05-15 10:14:15 浏览: 35
二叉排序树,实现插入节点和查找
5星 · 资源好评率100%
好的,以下是二叉排序树类的设计:
```cpp
#include <iostream>
using namespace std;
class BSTree {
private:
struct TreeNode {
int data; // 存储数据
TreeNode *left; // 左子树指针
TreeNode *right; // 右子树指针
};
TreeNode *root; // 根结点指针
// 递归插入结点
TreeNode* insert(TreeNode *r, int val) {
if (r == nullptr) {
r = new TreeNode;
r->data = val;
r->left = r->right = nullptr;
} else if (val < r->data) {
r->left = insert(r->left, val);
} else if (val > r->data) {
r->right = insert(r->right, val);
}
return r;
}
// 递归构造二叉排序树
void construct(int arr[], int n) {
for (int i = 0; i < n; ++i) {
root = insert(root, arr[i]);
}
}
// 输出查找路径
void findPath(TreeNode *r, int val) {
cout << r->data << " ";
if (val < r->data) {
findPath(r->left, val);
} else if (val > r->data) {
findPath(r->right, val);
}
}
// 判断是否二叉排序树
bool isBST(TreeNode *r, int min, int max) {
if (r == nullptr) {
return true;
}
if (r->data < min || r->data > max) {
return false;
}
return isBST(r->left, min, r->data - 1) && isBST(r->right, r->data + 1, max);
}
public:
// 默认构造函数
BSTree() : root(nullptr) {}
// 构造二叉排序树
BSTree(int arr[], int n) {
construct(arr, n);
}
// 插入结点
void insert(int val) {
root = insert(root, val);
}
// 输出查找路径
void findPath(int val) {
findPath(root, val);
cout << endl;
}
// 判断是否二叉排序树
bool isBST() {
return isBST(root, INT_MIN, INT_MAX);
}
};
```
使用示例:
```cpp
int main() {
int arr[] = {5, 2, 7, 1, 3, 6, 8};
BSTree tree(arr, 7);
tree.insert(4);
tree.findPath(4);
if (tree.isBST()) {
cout << "This is a binary search tree." << endl;
} else {
cout << "This is not a binary search tree." << endl;
}
return 0;
}
```
阅读全文