以下是用C++实现二叉排序树的删除操作的示例代码:

#include <iostream>
using namespace std;

struct TreeNode {
    int val;
    TreeNode* left;
    TreeNode* right;
    TreeNode(int v) : val(v), left(nullptr), right(nullptr) {}
};

TreeNode* insert(TreeNode* root, int val) {
    if (!root) {
        root = new TreeNode(val);
        return root;
    }
    if (val < root->val) {
        root->left = insert(root->left, val);
    } else if (val > root->val) {
        root->right = insert(root->right, val);
    }
    return root;
}

TreeNode* findMin(TreeNode* root) {
    if (!root) {
        return nullptr;
    }
    while (root->left) {
        root = root->left;
    }
    return root;
}

TreeNode* remove(TreeNode* root, int val) {
    if (!root) {
        return nullptr;
    }
    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) {
            TreeNode* temp = root->right;
            delete root;
            return temp;
        } else if (!root->right) {
            TreeNode* temp = root->left;
            delete root;
            return temp;
        } else {
            TreeNode* minNode = findMin(root->right);
            root->val = minNode->val;
            root->right = remove(root->right, minNode->val);
        }
    }
    return root;
}

void inorderTraversal(TreeNode* root) {
    if (!root) {
        return;
    }
    inorderTraversal(root->left);
    cout << root->val << " ";
    inorderTraversal(root->right);
}

int main() {
    TreeNode* root = nullptr;
    root = insert(root, 5);
    root = insert(root, 3);
    root = insert(root, 7);
    root = insert(root, 1);
    root = insert(root, 9);
    root = insert(root, 4);
    root = insert(root, 6);

    cout << "Inorder traversal before deletion: ";
    inorderTraversal(root);
    cout << endl;

    root = remove(root, 3);

    cout << "Inorder traversal after deletion: ";
    inorderTraversal(root);
    cout << endl;

    return 0;
}

该程序首先定义了一个TreeNode结构体,包含节点值、左右子节点指针。接着定义了insert函数,用于向二叉排序树中插入节点。findMin函数用于查找树中最小节点。最核心的是remove函数,它实现了二叉排序树的删除操作。在该函数中,首先判断要删除的节点是否存在,如果存在,就判断它的左右子节点情况,如果有一个为空,那么就直接将它的另一个子节点接到它的父节点上,如果两个都不为空,那么就找到它右子树中的最小节点,将它的值赋给要删除的节点,然后再递归删除右子树中的最小节点。最后,定义了inorderTraversal函数,用于中序遍历二叉排序树,以便验证删除操作的正确性。在main函数中,先插入一些节点,然后进行删除操作,并输出中序遍历结果。

用c++写一个二叉排序树删除

原文地址: https://www.cveoy.top/t/topic/bsvk 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录