扫码加入训练营

牢记核心词

学习得礼盒

计算机考研:数据结构常用算法精析(8)

2013-12-11 14:42:33来源:新东方在线编辑

  3.二叉排序树的删除结点

  (1)算法思路:设指针p指向待删除结点,q为p的父结点指针,分两种情况讨论如下:

  ①当p结点无左子树时,如图

  PR

  q

  P

  p=q->Lchild

  PR

  q

  P

  p=q->Rchild

  其中PR为p结点的右子树(PR=空时,P为叶结点)。此时删除操作只要令:

  q->Lchild=p->Rchild; 或 q->Rchild=p->Rchild;

  ②当p结点的左子树PL存在时,有两种删除方法。

  删除前:

  其一是 直接删除P,再将P的右子树接到新子树的最后下脚

  另一种:将P被最右下的元素替换而不用删除结点(用中序前驱替换)需要掌握的

  (2)算法描述

  Status BSTdelete(BSP t,keytype k)

  //在根指针为t的二叉排序树中,删除key=k的结点的算法//

  { BSP p,q,f,h;

  p=t;q=NULL; //q为p的父结点指针//

  while(p) //寻找被删除结点//

  { if(p->data.key==k)

  break; //找到被删p结点,退出//

  q=p;

  if(kdata.key)

  p=p->Lchild; //向左找//

  else

  p=p->Rchild; //向右找//

  }

  if(p==NULL)

  return(t); //若k不在树中,返回//

  if(p->Lchild==NULL) //p无左子树时//

  { if(q==NULL)

  t=p->Rchild; //p为根,删除后,其右子为根//

  else if(q->Lchild==p) //p为q之左子时//

  q->Lchild=p->Rchild;

  else

  q->Rchild=p->Rchild; //p为q之右子时//

  free(p);

  }

  else //p的左子树存在//

  { f=p;h=p->Lchild; //寻找p在中序下的直接前驱h//

  while(h->Rchild)

  { f=h;

  h=h->Rchild;

  }

  p->data=h->data; //以h结点代替p结点,即删除p结点//

  if(f!=p)

  f->Rchild=h->Lchild;

  else

  f->Lchild=h->Lchild;

  free(h);

  }

  return(t);

  }

考研公开课小程序

本文关键字: 计算机 考研 数据结构

声明:如本网转载稿涉及版权等问题,请作者致信lulei@xdfzx.com,我们将及时处理。

限时免费
资料推荐
更多>>
更多内容

关注新东方在线考研服务号

获得21考研真题及答案解析

1. 打开手机微信【扫一扫】,识别上方二维码;
2.点击【关注公众号】,获取资料大礼包。

考研资料大礼包
近10年考研真题及答案免费下载
更多>>
更多公开课>>
更多>>
更多资料
获取验证码
收不到短信?点此接收语音验证码
电话拨打中...请留意来自125909888237的来电
60秒后可重新获取
《新东方在线注册条款》  、  《隐私权保护政策》  及  《儿童隐私保护政策》
账号密码登录 找回密码
国际手机登录
《新东方在线注册条款》  、  《隐私权保护政策》  及  《儿童隐私保护政策》
手机快速登录 找回密码
获取验证码
收不到短信?点此接收语音验证码
电话拨打中...请留意来自125909888237的来电
60秒后可重新获取
《新东方在线注册条款》  、  《隐私权保护政策》  及  《儿童隐私保护政策》
账号密码登录 找回密码
国际手机登录
《新东方在线注册条款》  、  《隐私权保护政策》  及  《儿童隐私保护政策》
手机快速登录 找回密码
获取验证码
收不到短信?点此接收语音验证码
电话拨打中...请留意来自125909888237的来电
60秒后可重新获取
《新东方在线注册条款》  、  《隐私权保护政策》  及  《儿童隐私保护政策》
账号密码登录 找回密码
国际手机登录
《新东方在线注册条款》  、  《隐私权保护政策》  及  《儿童隐私保护政策》
手机快速登录 找回密码