c++

C++中树节点的插入与删除操作

小樊
87
2024-08-24 03:23:30
栏目: 编程语言

在C++中,可以通过定义一个树节点结构体来表示树节点,并编写插入和删除操作的函数来实现对树节点的操作。以下是一个简单的示例:

#include <iostream>

struct TreeNode {
    int val;
    TreeNode* left;
    TreeNode* right;

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

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

void remove(TreeNode* root, int val) {
    if (root == nullptr) {
        return;
    }
    if (val < root->val) {
        remove(root->left, val);
    } else if (val > root->val) {
        remove(root->right, val);
    } else {
        if (root->left == nullptr) {
            TreeNode* temp = root->right;
            delete root;
            root = temp;
        } else if (root->right == nullptr) {
            TreeNode* temp = root->left;
            delete root;
            root = temp;
        } else {
            TreeNode* minNode = root->right;
            while (minNode->left != nullptr) {
                minNode = minNode->left;
            }
            root->val = minNode->val;
            remove(root->right, minNode->val);
        }
    }
}

int main() {
    TreeNode* root = new TreeNode(5);
    insert(root, 3);
    insert(root, 7);
    insert(root, 2);
    insert(root, 4);
    insert(root, 6);
    insert(root, 8);

    remove(root, 3);

    // 输出树的节点值
    std::cout << root->val << " " << root->left->val << " " << root->right->val << std::endl;

    return 0;
}

在上面的示例中,定义了一个TreeNode结构体来表示树节点,然后实现了插入和删除操作的函数insertremove。在main函数中创建了一个根节点,并依次插入一些节点值,然后删除一个节点值,并输出树的节点值。

0
看了该问题的人还看了