117.info
人生若只如初见

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

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

#include 

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函数中创建了一个根节点,并依次插入一些节点值,然后删除一个节点值,并输出树的节点值。

未经允许不得转载 » 本文链接:https://www.117.info/ask/fe9a9AzsBBw9SAQ.html

推荐文章

  • c#字符串怎么转换成字符数组

    在C#中,可以使用ToCharArray()方法将字符串转换为字符数组。示例如下:
    string str = "Hello World";
    char[] charArray = str.ToCharArray(); foreac...

  • c#如何删除字符串中的指定字符

    要删除字符串中的指定字符,可以使用Replace方法将指定字符替换为空字符串。例如,如果要删除所有的空格字符,可以使用以下代码:
    string originalString =...

  • c#字符串去掉空格怎么实现

    在C#中,可以使用Trim()方法来去除字符串的前导和尾随空格。示例如下:
    string str = " Hello, World! ";
    string trimmedStr = str.Trim(); Console.W...

  • c++如何获取鼠标位置

    在C++中,您可以使用Windows API中的GetCursorPos函数来获取鼠标的当前位置。以下是一个简单的示例代码:
    #include #include int main() { POINT p; if(Get...

  • C++树节点的数据结构如何优化

    优化 C++ 树节点的数据结构可以通过以下两种方式进行改进: 使用指针而不是对象:在树节点的数据结构中,通常会包含一个指向左子节点和右子节点的指针,以及存储...

  • 如何在C++中实现树节点的遍历

    在C++中实现树节点的遍历可以使用递归或者迭代的方法来实现。以下是使用递归的方法实现树节点的遍历:
    #include // 定义树节点结构
    struct TreeNode {...

  • C++中树节点(TreeNode)如何设计

    在C++中设计树节点(TreeNode)可以使用类来表示,一个基本的树节点可以包含以下几个成员变量:
    template class TreeNode {
    public: T data; // 节点数据...

  • C++中如何监控进程状态

    在C++中监控进程状态可以使用操作系统提供的API函数来实现。以下是一种常用的方法: 使用 和 头文件中的 waitpid() 函数来等待子进程状态的改变。 #include #inc...