题目: 根据二叉排序树的抽象数类型定义,使用链表实现一个二叉排序树。二叉排序树的基本功能: 1、建立 2、查找 3、插入 4、删除 5、销毁 编写测试main()函数测试算法的正确性。(用C++语言)
时间: 2023-12-30 09:05:36 浏览: 97
数据结构课程设计平衡二叉排序树的三种基本功能:查找、插入、删除。
5星 · 资源好评率100%
好的,下面是用 C++ 语言实现二叉排序树的链表实现代码,包括基本功能:建立、查找、插入、删除、销毁,并在 main 函数中进行测试。
```c++
#include <iostream>
using namespace std;
// 定义二叉排序树节点结构体
struct TreeNode {
int val;
TreeNode* left;
TreeNode* right;
TreeNode(int x) : val(x), left(NULL), right(NULL) {}
};
// 插入节点
void insertNode(TreeNode** root, int data) {
if (*root == NULL) {
*root = new TreeNode(data);
} else {
if (data < (*root)->val) {
insertNode(&((*root)->left), data);
} else if (data > (*root)->val) {
insertNode(&((*root)->right), data);
}
}
}
// 查找节点
TreeNode* searchNode(TreeNode* root, int data) {
if (root == NULL) {
return NULL;
} else if (data == root->val) {
return root;
} else if (data < root->val) {
return searchNode(root->left, data);
} else {
return searchNode(root->right, data);
}
}
// 删除节点
TreeNode* deleteNode(TreeNode* root, int data) {
if (root == NULL) {
return NULL;
} else if (data < root->val) {
root->left = deleteNode(root->left, data);
} else if (data > root->val) {
root->right = deleteNode(root->right, data);
} else {
if (root->left == NULL && root->right == NULL) {
delete root;
root = NULL;
} else if (root->left == NULL) {
TreeNode* temp = root;
root = root->right;
delete temp;
} else if (root->right == NULL) {
TreeNode* temp = root;
root = root->left;
delete temp;
} else {
TreeNode* temp = root->right;
while (temp->left != NULL) {
temp = temp->left;
}
root->val = temp->val;
root->right = deleteNode(root->right, temp->val);
}
}
return root;
}
// 销毁二叉排序树
void destroyTree(TreeNode** root) {
if (*root != NULL) {
destroyTree(&((*root)->left));
destroyTree(&((*root)->right));
delete *root;
*root = NULL;
}
}
// 中序遍历
void inorderTraversal(TreeNode* root) {
if (root != NULL) {
inorderTraversal(root->left);
cout << root->val << " ";
inorderTraversal(root->right);
}
}
int main() {
TreeNode* bst = NULL;
// 插入节点
insertNode(&bst, 6);
insertNode(&bst, 2);
insertNode(&bst, 8);
insertNode(&bst, 1);
insertNode(&bst, 5);
insertNode(&bst, 3);
// 中序遍历
cout << "Inorder traversal: ";
inorderTraversal(bst);
cout << endl;
// 查找节点
TreeNode* node = searchNode(bst, 3);
if (node != NULL) {
cout << "Found node: " << node->val << endl;
} else {
cout << "Node not found." << endl;
}
// 删除节点
bst = deleteNode(bst, 2);
cout << "Inorder traversal after deleting node 2: ";
inorderTraversal(bst);
cout << endl;
// 销毁二叉排序树
destroyTree(&bst);
return 0;
}
```
在主函数中,我们首先创建一个空的二叉排序树,然后插入一些节点。使用中序遍历函数输出二叉排序树的内容,查找一个节点,删除一个节点,再次使用中序遍历函数输出二叉排序树的内容,最后销毁二叉排序树。您可以根据自己的需要进行修改和扩展。
阅读全文