二叉排序树的基本运算c++
时间: 2023-12-20 12:32:36 浏览: 128
二叉排序树(Binary Search Tree,BST)是一种特殊的二叉树,它满足以下性质:
1. 左子树上所有节点的值小于根节点的值;
2. 右子树上所有节点的值大于根节点的值;
3. 左右子树也分别为二叉排序树。
二叉排序树的基本运算包括入、删除和遍历操作。
1.入操作:
插入操作的原理是将新节点按照叉排序树的性质插入到合的位置。插入方式可以通过递归或循环实。
2. 删除操作:
删除操作的原理是找到要删除的节点,并根据不同情况进行删除。C++中可以使用递归实现删除操作。
3. 遍历操作:
遍历操作是按照一定的顺序访问二叉排序树中的所有节点。常见的遍历方式有前序遍历、中序遍历、后序遍历和层次遍历。
以下是C++实现二叉排序树基本运算的示例代码:
```cpp
#include <iostream>
using namespace std;
struct TreeNode {
int val;
TreeNode* left;
TreeNode* right;
TreeNode(int x) : val(x), left(NULL), right(NULL) {}
};
// 插入操作
TreeNode* insert(TreeNode* root, int val) {
if (root == NULL) {
return new TreeNode(val);
}
if (val < root->val) {
root->left = insert(root->left, val);
} else {
root->right = insert(root->right, val);
}
return root;
}
// 删除操作
TreeNode* remove(TreeNode* root, int val) {
if (root == NULL) {
return NULL;
}
if (val < root->val) {
root->left = remove(root->left, val);
} else if (val > root->val) {
root->right = remove(root->right, val);
} else {
if (root->left == NULL) {
TreeNode* temp = root->right;
delete root;
return temp;
} else if (root->right == NULL) {
TreeNode* temp = root->left;
delete root;
return temp;
} else {
TreeNode* temp = root->right;
while (temp->left != NULL) {
temp = temp->left;
}
root->val = temp->val;
root->right = remove(root->right, temp->val);
}
}
return root;
}
// 前序遍历
void preorder(TreeNode* root) {
if (root == NULL) {
return;
}
cout << root->val << " ";
preorder(root->left);
preorder(root->right);
}
// 中序遍历
void inorder(TreeNode* root) {
if (root == NULL) {
return;
}
inorder(root->left);
cout << root->val << " ";
inorder(root->right);
}
// 后序遍历
void postorder(TreeNode* root) {
if (root == NULL) {
return;
}
postorder(root->left);
postorder(root->right);
cout << root->val << " ";
}
// 层次遍历
void levelorder(TreeNode* root) {
if (root == NULL) {
return;
}
queue<TreeNode*> q;
q.push(root);
while (!q.empty()) {
TreeNode* node = q.front();
q.pop();
cout << node->val << " ";
if (node->left != NULL) {
q.push(node->left);
}
if (node->right != NULL) {
q.push(node->right);
}
}
}
int main() {
TreeNode* root = NULL;
root = insert(root, 5);
root = insert(root, 3);
root = insert(root, 7);
root = insert(root, 2);
root = insert(root, 4);
root = insert(root, 6);
root = insert(root, 8);
cout << "前序遍历结果:";
preorder(root);
cout << endl;
cout << "中序遍历结果:";
inorder(root);
cout << endl;
cout << "后序遍历结果:";
postorder(root);
cout << endl;
cout << "层次遍历结果:";
levelorder(root);
cout << endl;
root = remove(root, 3);
cout << "删除节点后的中序遍历结果:";
inorder(root);
cout << endl;
return 0;
}
```
阅读全文