首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

正在从不使用std::pair的BST中删除节点

从不使用std::pair的BST中删除节点是指在二叉搜索树(Binary Search Tree,BST)中删除一个节点,但不使用C++标准库中的std::pair数据结构。

BST是一种常见的数据结构,它具有以下特点:

  • 每个节点都包含一个键值对,其中键是唯一的。
  • 左子树中的所有节点的键小于根节点的键。
  • 右子树中的所有节点的键大于根节点的键。
  • 左右子树也是BST。

要从BST中删除一个节点,需要考虑以下几种情况:

  1. 要删除的节点是叶子节点(没有子节点):直接删除该节点即可。
  2. 要删除的节点只有一个子节点:将子节点替换为要删除的节点。
  3. 要删除的节点有两个子节点:找到该节点的后继节点(右子树中最小的节点),将后继节点的值复制到要删除的节点中,然后删除后继节点。

以下是一个不使用std::pair的BST删除节点的示例代码:

代码语言:txt
复制
#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使用了递归的方式进行操作。

对于这个问题,腾讯云提供了云计算相关的产品和服务,如云服务器、云数据库、云存储等。具体推荐的产品和产品介绍链接地址可以根据实际需求和使用场景进行选择。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

领券