用C++实现二叉排序树,其中包括创建、遍历、查找、插入、删除、销毁功能,并通过main()函数测试算法的正确性
时间: 2023-07-10 20:22:42 浏览: 98
好的,以下是C++实现二叉排序树的代码示例,其中包括创建、遍历、查找、插入、删除、销毁功能,并通过main()函数测试算法的正确性:
```cpp
#include <iostream>
using namespace std;
// 二叉排序树结点
typedef struct bstNode {
int data;
struct bstNode *left;
struct bstNode *right;
} BSTNode;
// 创建二叉排序树
BSTNode* createBST(BSTNode* root, int data) {
if (root == NULL) {
root = new BSTNode;
root->data = data;
root->left = root->right = NULL;
return root;
}
if (data < root->data) {
root->left = createBST(root->left, data);
} else if (data > root->data) {
root->right = createBST(root->right, data);
}
return root;
}
// 中序遍历二叉排序树
void inorderBST(BSTNode* root) {
if (root == NULL) {
return;
}
inorderBST(root->left);
cout << root->data << " ";
inorderBST(root->right);
}
// 查找二叉排序树
BSTNode* searchBST(BSTNode* root, int data) {
if (root == NULL) {
return NULL;
}
if (data < root->data) {
return searchBST(root->left, data);
} else if (data > root->data) {
return searchBST(root->right, data);
} else {
return root;
}
}
// 插入二叉排序树
BSTNode* insertBST(BSTNode* root, int data) {
if (root == NULL) {
root = new BSTNode;
root->data = data;
root->left = root->right = NULL;
return root;
}
if (data < root->data) {
root->left = insertBST(root->left, data);
} else if (data > root->data) {
root->right = insertBST(root->right, data);
}
return root;
}
// 删除二叉排序树结点
BSTNode* deleteBST(BSTNode* root, int data) {
if (root == NULL) {
return NULL;
}
if (data < root->data) {
root->left = deleteBST(root->left, data);
} else if (data > root->data) {
root->right = deleteBST(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 = root->right;
while (temp->left != NULL) {
temp = temp->left;
}
root->data = temp->data;
root->right = deleteBST(root->right, temp->data);
}
}
return root;
}
// 销毁二叉排序树
void destroyBST(BSTNode* root) {
if (root == NULL) {
return;
}
destroyBST(root->left);
destroyBST(root->right);
delete root;
}
int main() {
BSTNode* root = NULL;
root = createBST(root, 5);
root = insertBST(root, 3);
root = insertBST(root, 8);
root = insertBST(root, 1);
root = insertBST(root, 4);
cout << "二叉排序树的中序遍历结果为:";
inorderBST(root);
cout << endl;
BSTNode* node = searchBST(root, 3);
if (node != NULL) {
cout << "找到了值为3的结点" << endl;
} else {
cout << "没有找到值为3的结点" << endl;
}
root = deleteBST(root, 3);
cout << "删除值为3的结点后,二叉排序树的中序遍历结果为:";
inorderBST(root);
cout << endl;
destroyBST(root);
return 0;
}
```
以上代码实现了二叉排序树的创建、遍历、查找、插入、删除和销毁功能,并且通过main()函数测试了算法的正确性。
阅读全文