从不使用std::pair的BST中删除节点是指在二叉搜索树(Binary Search Tree,BST)中删除一个节点,但不使用C++标准库中的std::pair数据结构。
BST是一种常见的数据结构,它具有以下特点:
要从BST中删除一个节点,需要考虑以下几种情况:
以下是一个不使用std::pair的BST删除节点的示例代码:
#include <iostream>
// BST节点定义
struct Node {
int key;
Node* left;
Node* right;
};
// 创建新节点
Node* createNode(int key) {
Node* newNode = new Node();
newNode->key = key;
newNode->left = nullptr;
newNode->right = nullptr;
return newNode;
}
// 插入节点
Node* insertNode(Node* root, int key) {
if (root == nullptr) {
return createNode(key);
}
if (key < root->key) {
root->left = insertNode(root->left, key);
} else if (key > root->key) {
root->right = insertNode(root->right, key);
}
return root;
}
// 查找节点
Node* searchNode(Node* root, int key) {
if (root == nullptr || root->key == key) {
return root;
}
if (key < root->key) {
return searchNode(root->left, key);
}
return searchNode(root->right, key);
}
// 查找最小节点
Node* findMinNode(Node* node) {
Node* current = node;
while (current && current->left != nullptr) {
current = current->left;
}
return current;
}
// 删除节点
Node* deleteNode(Node* root, int key) {
if (root == nullptr) {
return root;
}
if (key < root->key) {
root->left = deleteNode(root->left, key);
} else if (key > root->key) {
root->right = deleteNode(root->right, key);
} else {
if (root->left == nullptr) {
Node* temp = root->right;
delete root;
return temp;
} else if (root->right == nullptr) {
Node* temp = root->left;
delete root;
return temp;
}
Node* temp = findMinNode(root->right);
root->key = temp->key;
root->right = deleteNode(root->right, temp->key);
}
return root;
}
// 中序遍历BST
void inorderTraversal(Node* root) {
if (root != nullptr) {
inorderTraversal(root->left);
std::cout << root->key << " ";
inorderTraversal(root->right);
}
}
int main() {
Node* root = nullptr;
root = insertNode(root, 50);
root = insertNode(root, 30);
root = insertNode(root, 20);
root = insertNode(root, 40);
root = insertNode(root, 70);
root = insertNode(root, 60);
root = insertNode(root, 80);
std::cout << "BST中序遍历结果:";
inorderTraversal(root);
std::cout << std::endl;
int keyToDelete = 30;
root = deleteNode(root, keyToDelete);
std::cout << "删除节点 " << keyToDelete << " 后的BST中序遍历结果:";
inorderTraversal(root);
std::cout << std::endl;
return 0;
}
这段代码实现了一个简单的BST,包括节点的插入、查找、删除和中序遍历功能。删除节点的函数deleteNode
使用了递归的方式进行操作。
对于这个问题,腾讯云提供了云计算相关的产品和服务,如云服务器、云数据库、云存储等。具体推荐的产品和产品介绍链接地址可以根据实际需求和使用场景进行选择。