使用c++语言,根据二叉排序树的抽象数类型定义,使用链表实现一个二叉排序树。二叉排序树的基本功能: 1、建立 2、查找 3、插入 4、删除 5、销毁 编写测试main()函数测试算法的正确性。
时间: 2023-12-30 15:05:36 浏览: 82
好的,以下是使用C++语言,链表实现二叉排序树的示例代码,包含建立、查找、插入、删除和销毁二叉排序树的基本功能。同时,也提供了一个简单的main()函数测试这些功能的正确性。
```c++
#include <iostream>
using namespace std;
// 二叉排序树节点的定义
struct BSTNode {
int data;
BSTNode* left;
BSTNode* right;
};
// 创建新的节点
BSTNode* createNode(int data) {
BSTNode* newNode = new BSTNode;
newNode->data = data;
newNode->left = NULL;
newNode->right = NULL;
return newNode;
}
// 向二叉排序树插入新的节点
BSTNode* insert(BSTNode* root, int data) {
if (root == NULL) {
root = createNode(data);
}
else if (data <= root->data) {
root->left = insert(root->left, data);
}
else {
root->right = insert(root->right, data);
}
return root;
}
// 在二叉排序树中查找指定节点
BSTNode* search(BSTNode* root, int data) {
if (root == NULL || root->data == data) {
return root;
}
else if (data < root->data) {
return search(root->left, data);
}
else {
return search(root->right, data);
}
}
// 查找二叉排序树中最小的节点
BSTNode* findMin(BSTNode* root) {
while (root->left != NULL) {
root = root->left;
}
return root;
}
// 在二叉排序树中删除指定节点
BSTNode* remove(BSTNode* root, int data) {
if (root == NULL) {
return NULL;
}
else if (data < root->data) {
root->left = remove(root->left, data);
}
else if (data > root->data) {
root->right = remove(root->right, data);
}
else {
// 当前节点是需要删除的节点
if (root->left == NULL && root->right == NULL) {
delete root;
root = NULL;
}
else if (root->left == NULL) {
BSTNode* temp = root;
root = root->right;
delete temp;
}
else if (root->right == NULL) {
BSTNode* temp = root;
root = root->left;
delete temp;
}
else {
BSTNode* temp = findMin(root->right);
root->data = temp->data;
root->right = remove(root->right, temp->data);
}
}
return root;
}
// 销毁整个二叉排序树
void destroy(BSTNode* root) {
if (root != NULL) {
destroy(root->left);
destroy(root->right);
delete root;
}
}
// 测试函数
int main() {
BSTNode* root = NULL;
root = insert(root, 8);
root = insert(root, 3);
root = insert(root, 10);
root = insert(root, 1);
root = insert(root, 6);
root = insert(root, 14);
root = insert(root, 4);
root = insert(root, 7);
root = insert(root, 13);
BSTNode* node1 = search(root, 6);
BSTNode* node2 = search(root, 12);
if (node1 != NULL) {
cout << "6 was found in the tree." << endl;
}
else {
cout << "6 was not found in the tree." << endl;
}
if (node2 != NULL) {
cout << "12 was found in the tree." << endl;
}
else {
cout << "12 was not found in the tree." << endl;
}
root = remove(root, 3);
root = remove(root, 8);
destroy(root);
return 0;
}
```
以上代码实现了二叉排序树的创建、查找、插入、删除和销毁功能,并且提供了一个简单的测试函数来验证这些功能的正确性。在main()函数中,我们先创建了一个二叉排序树,并且插入了一些节点。然后,我们使用search()函数来查找树中的节点。接下来,我们使用remove()函数删除一些节点,并最终销毁整个二叉排序树。
阅读全文