-->
当前位置:首页 > 题库 > 正文内容

程序填空题:二叉排序树删除结点

Luz4年前 (2021-05-10)题库1280
```c++
#include
using namespace std;

typedef struct ElemType{
int key;
}ElemType;

typedef struct BSTNode{
ElemType data;
BSTNode *lchild,*rchild;
}BSTNode,*BSTree;

int flag=1;
void InsertBST(BSTree &T,ElemType e ) ;//实现细节隐藏
void CreateBST(BSTree &T ) ;//实现细节隐藏
void InOrderTraverse(BSTree &T);//中序遍历,实现细节隐藏

void DeleteBST(BSTree &T,char key) {
BSTree p=T;BSTree f=NULL;
BSTree q;
BSTree s;
while(p){
if (p->data.key == key) break;
f=p;
if (p->data.key> key) p=p->lchild;
else p=p->rchild;
}
if(!p) @@[return](2);
if ((p->lchild)&& (p->rchild)) {
q = p;
s = p->lchild;
while (s->rchild)
{q = s; s = s->rchild;}
p->data= s->data;
if(q!=p)@@[q->rchild = s->lchild](2);
else @@[q->lchild = s->lchild](2);
delete s;
}
else{
if(!p->rchild) { q = p; p = p->lchild; }
else if(!p->lchild) { q = p; p = p->rchild; }

if(!f) @@[T=p](2);
else if (q==f->lchild) @@[f->lchild = p](2);
else @@[f->rchild = p](2);
delete q;
}
}

int main()
{
BSTree T;
CreateBST(T);
int key;
cin>>key;
DeleteBST(T,key);
InOrderTraverse(T);
}

```






答案:
第1空:return

第2空:q->rchild = s->lchild

第3空:q->lchild = s->lchild

第4空:T=p

第5空:f->lchild = p

第6空:f->rchild = p

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。