用C++实现二叉排序树(1)从空的二叉树开始,每输入一个节点数据,就建立一个新节点插入到当前已生成的二叉排序树中; (2)在二叉排序树中查找某一结点; (3)删除任一指定的结点
时间: 2024-01-28 17:05:37 浏览: 82
以下是C++实现二叉排序树的代码。其中包括从空的二叉树开始插入节点、查找节点和删除节点的操作:
```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 = newNode->right = NULL;
return newNode;
}
//插入节点
BSTNode* insertNode(BSTNode* root, int data) {
if (root == NULL) {
root = createNode(data);
}
else if (data <= root->data) {
root->left = insertNode(root->left, data);
}
else {
root->right = insertNode(root->right, data);
}
return root;
}
//查找节点
bool searchNode(BSTNode* root, int data) {
if (root == NULL) {
return false;
}
else if (root->data == data) {
return true;
}
else if (data <= root->data) {
return searchNode(root->left, data);
}
else {
return searchNode(root->right, data);
}
}
//查找最小节点
BSTNode* findMinNode(BSTNode* root) {
while (root->left != NULL) {
root = root->left;
}
return root;
}
//删除节点
BSTNode* deleteNode(BSTNode* root, int data) {
if (root == NULL) {
return root;
}
else if (data < root->data) {
root->left = deleteNode(root->left, data);
}
else if (data > root->data) {
root->right = deleteNode(root->right, data);
}
else {
//节点需要被删除
//情况1:没有子节点(叶子节点)
if (root->left == NULL && root->right == NULL) {
delete root;
root = NULL;
}
//情况2:只有一个子节点
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;
}
//情况3:有两个子节点
else {
BSTNode* temp = findMinNode(root->right);
root->data = temp->data;
root->right = deleteNode(root->right, temp->data);
}
}
return root;
}
//中序遍历二叉排序树
void inorder(BSTNode* root) {
if (root == NULL) {
return;
}
inorder(root->left);
cout << root->data << " ";
inorder(root->right);
}
int main() {
BSTNode* root = NULL;
root = insertNode(root, 5);
insertNode(root, 3);
insertNode(root, 7);
insertNode(root, 1);
insertNode(root, 4);
insertNode(root, 6);
insertNode(root, 8);
cout << "中序遍历二叉排序树:";
inorder(root);
cout << endl;
cout << "5是否在二叉排序树中:" << searchNode(root, 5) << endl;
cout << "2是否在二叉排序树中:" << searchNode(root, 2) << endl;
root = deleteNode(root, 5);
cout << "删除节点5后的中序遍历二叉排序树:";
inorder(root);
cout << endl;
return 0;
}
```
输出结果为:
```
中序遍历二叉排序树:1 3 4 5 6 7 8
5是否在二叉排序树中:1
2是否在二叉排序树中:0
删除节点5后的中序遍历二叉排序树:1 3 4 6 7 8
```
注意:以上代码中的数据类型为int,如果想存储其他类型的数据,需要修改代码中的数据类型。
阅读全文