• 手机版

    扫码体验手机版

  • 微信公众号

    扫码关注公众号

国内首家协议开发

软芯音视解码保护平台

在线
客服

发布
需求

在线
聊天

天盟
APP

天盟APP下载

关注
微信

微信扫一扫访问
顶部

关于二叉树与二叉搜索树!

对于二叉搜索树,我们如果要删除一个节点,需要我们比较左右节点大小来找到这个节点,然后再有三种情况,无孩子,一个孩子,两个孩子。
但是,如果针对任意的二叉树(非二叉搜索树),那么如果要删除任意数据,应该怎么C代码实现呢?
我自己写了一个,不知可不可行,大神来给意见呐!
以下是删除功能的代码
struct Node *Find(struct Node *root){        while (root -> left != NULL) root = root -> left;        return root;}struct Node *Delete(struct Node *root, int data){        if (root == NULL) return root;        if (root -> data != data)         {                root -> left = Delete(root -> left, data);                root -> right = Delete(root -> right, data);        }        //wohoo....i found you,get ready to delete!        else        {                //case 1 : no child                if (root -> left == NULL && root -> right == NULL)                {                        free(root);//C++ --> delete root;                        root = NULL;                }                //case 2 : one child                else if (root -> left == NULL)                {                        struct Node *temp = root;                        root = root -> right;                        free(temp);//C++ --> delete root;                                }                else if (root -> right == NULL)                {                        struct Node *temp = root;                        root = root -> left;                        free(temp);//C++ --> delete root;                }                else//case 3 : two children                {                        struct Node *temp = Find(root);//find a data to replace this deleted data                        root -> data = temp -> data;                        root -> left = Delete(root -> left, temp -> data);//Delete the data I found on the left                }        }        return root;}

免责声明:本内容仅代表回答会员见解不代表天盟观点,请谨慎对待。

版权声明:作者保留权利,不代表天盟立场。

使用道具 举报

发新帖

发布任务需求已有1031168位用户正在使用天盟网服务

发布分类: *
任务预算: *
需求内容: *
手机号码: *
任务商家报价为
  • 预算价 :
  • 成交价 :
  • 完工期 :
  • 质保期 :

* 最终任务项目以服务商报价、双方协商为准!