c - 删除C BST中的节点

标签 c

当我有两个 child 时,我在删除节点时遇到问题,我不知道该怎么办,因为我已经解决了没有 child 、左 child 和右 child 的问题

struct Node* deleteNode(Node *root, int val)
    {
        if(root == NULL) return root;
        else if(val < root->data) 
            root->left = deleteNode(root->left,val);
        else if(val > root->data) 
            root->right = deleteNode(root->right, val);
        else 
        {
            if(root->left == NULL && root->right == NULL)
            {
                free(root);
                root = NULL;
            } 
            else if(root->left == NULL)
            {
                Node *temp = root;
                root = root->right;
                free(temp);
            } 
            else if(root->right == NULL)
            {
                Node *temp = root;
                root = root->left;
                free(temp);
            } 
    }

最佳答案

如果我正确理解你的问题,你必须使一个子节点成为另一个子节点的子节点。您必须为添加执行另一个递归函数,以防两个子节点的度数都 < 1

关于c - 删除C BST中的节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43856859/

相关文章:

c++ - Windows 客户端应用程序使用 GSSAPI/Kerberos API 通过 KDC 进行身份验证

c++ - 如何绘制 HICON?

c - 传递多维数组

c++ - 使用 OpenCV(基于霍夫变换或其他功能)编写稳健(颜色和大小不变)的圆检测

c++ - 开源 Visual Studio 项目分发噩梦

c - C 中的 NULL 混淆

c - 信号处理问题

c - execle() 还指定了环境。这意味着什么?

c - 重复错误 : C file include

c - 将多维数组传递给 C 中的函数