免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12
最近访问板块 发新帖
楼主: UFancyMe
打印 上一主题 下一主题

[C] 新手求解BST树删除单个节点,出现两个错误 [复制链接]

论坛徽章:
14
水瓶座
日期:2014-06-10 09:51:0215-16赛季CBA联赛之江苏
日期:2017-11-27 11:42:3515-16赛季CBA联赛之八一
日期:2017-04-12 14:26:2815-16赛季CBA联赛之吉林
日期:2016-08-20 10:43:1215-16赛季CBA联赛之广夏
日期:2016-06-23 09:53:58程序设计版块每日发帖之星
日期:2016-02-11 06:20:00程序设计版块每日发帖之星
日期:2016-02-09 06:20:0015-16赛季CBA联赛之上海
日期:2015-12-25 16:40:3515-16赛季CBA联赛之广夏
日期:2015-12-22 09:39:36程序设计版块每日发帖之星
日期:2015-08-24 06:20:002015亚冠之德黑兰石油
日期:2015-08-07 09:57:302015年辞旧岁徽章
日期:2015-03-03 16:54:15
11 [报告]
发表于 2015-05-12 09:58 |只看该作者
回复 8# UFancyMe


    实现个父指针不费什么事吧?前驱、后继实现也有用,同时也大大简化了删除

论坛徽章:
0
12 [报告]
发表于 2015-05-13 12:14 |只看该作者
本帖最后由 UFancyMe 于 2015-05-13 12:31 编辑

回复 9# MeRcy_PM


重写了一段   还是不明白为什么没有free()掉原来的节点
此处要删除节点12,找到13赋给12,node* temp,指向节点13,为什么在gdb中free(temp)之后 p n->right->left  还是给出了一个值(struct node*)  0x6034d0

static node* remove_node(node* n,ElementType *e)
          {
          if(n==NULL)   return NULL;
          //递归找到要删除的节点
          if(*e < n->element)
            n->left=remove_node(n->left,e);
          else if(*e > n->element)
            n->right=remove_node(n->right,e);
          else
            {
               node* temp;
               if(n->left && n->right)
               {
                  temp=find_min(n->right);
                  n->element=temp->element;
                  if(temp->right)
                  remove_node(temp,&(temp->element));
               }
               else
               {
              temp=n;
                   if(n->left==NULL)
                     n=n->right;
                   else
                     n=n->left;
               }
            free(temp);
            temp=NULL;
            }
           return n;
     }

论坛徽章:
0
13 [报告]
发表于 2015-05-13 12:32 |只看该作者
回复 11# lxyscls


新手想试着把这几个都做出来   现在两种代码都是差不多的错误  不明白   

论坛徽章:
14
水瓶座
日期:2014-06-10 09:51:0215-16赛季CBA联赛之江苏
日期:2017-11-27 11:42:3515-16赛季CBA联赛之八一
日期:2017-04-12 14:26:2815-16赛季CBA联赛之吉林
日期:2016-08-20 10:43:1215-16赛季CBA联赛之广夏
日期:2016-06-23 09:53:58程序设计版块每日发帖之星
日期:2016-02-11 06:20:00程序设计版块每日发帖之星
日期:2016-02-09 06:20:0015-16赛季CBA联赛之上海
日期:2015-12-25 16:40:3515-16赛季CBA联赛之广夏
日期:2015-12-22 09:39:36程序设计版块每日发帖之星
日期:2015-08-24 06:20:002015亚冠之德黑兰石油
日期:2015-08-07 09:57:302015年辞旧岁徽章
日期:2015-03-03 16:54:15
14 [报告]
发表于 2015-05-13 14:18 |只看该作者
UFancyMe 发表于 2015-05-13 12:32
回复 11# lxyscls


看CLRS,看伪代码

论坛徽章:
7
天秤座
日期:2014-08-07 13:56:30丑牛
日期:2014-08-27 20:34:21双鱼座
日期:2014-08-27 22:02:21天秤座
日期:2014-08-30 10:39:11双鱼座
日期:2014-09-21 20:07:532015年亚洲杯之日本
日期:2015-02-06 14:00:282015亚冠之大阪钢巴
日期:2015-11-02 14:50:19
15 [报告]
发表于 2015-05-13 17:53 |只看该作者
回复 12# UFancyMe
free只是告诉内核这块东西我用完了,你可以回收了,free不能帮你把所有指向这块内存的东西都置空

   
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP