二叉排序树的建立与删除 联系客服

发布时间 : 星期六 文章二叉排序树的建立与删除更新完毕开始阅读3a4d5ae7c1c708a1284a445e

周国庆 《二叉排序树的建立与删除》 第16页 共19页

p=t; f=NULL; while(p){

if(p->data==k) break; f=p; if(p->data>k) p=p->lchild; else p=p->rchild;

}

if(p==NULL){ }

printf(\关键字不存在!\\n\return t;

if(p->lchild==NULL){

if(f==NULL)

t=p->rchild;

else if(f->lchild==p)

f->lchild=p->rchild;

else f->rchild=p->rchild; free(p); } else{

q=p; s=p->lchild; while(s->rchild){ } if(q==p)

q->lchild=s->lchild; q=s; s=s->rchild;

周国庆 《二叉排序树的建立与删除》 第17页 共19页

else q->rchild=s->lchild;

p->data=s->data; }

void createbst(bitree *root) //二叉排序树的建立 {

int i,data,cnt;

*root=NULL; //置空树 printf(\请输入数据个数: \ //设置输入数据个数 scanf(\ printf(\请输入数据: \

for(i=0;i

void table() //显示选项列表 {

printf(\ 二叉树操作:\\n\

printf(\ 1. 创建二叉树 \\n\ printf(\ 2. 搜索节点 \\n\ printf(\ 3. 插入节点 \\n\ printf(\ 4. 删除节点 \\n\ printf(\ 0. 退出 \\n\}

}

free(s);

return t;

周国庆 《二叉排序树的建立与删除》 第18页 共19页

int main() {

int data,menu;bitree root;

table(); //调用table函数显示操作列表 printf(\请输入相应操作:\ scanf(\

while(!(menu>=0 && menu<=4)){ //输入序号不存在,操作出错

printf(\操作有问题,请重新输入:\ scanf(\}

while(menu!=0){ //建立循环,选择不同的操作

switch(menu){

case 1:{ //选择操作1,即二叉排序树的创建

printf(\创建二叉树: \\n\ createbst(&root); display(root); printf(\ break; }

case 2:{ //选择操作2,即在二叉排序树中进行查找

printf(\请输入你想搜索的关键字:\ scanf(\ int t=searchbst(root,data); if(t!=INF){

printf(\查找成功: \ printf(\ }

else printf(\关键字不存在\\n\ break; }

周国庆 《二叉排序树的建立与删除》 第19页 共19页

case 3:{ //选择操作3,即在二叉排序树中进行插入操作

printf(\请输入你想插入的关键字:\ scanf(\ insertbst(&root,data); display(root); printf(\ break; }

case 4:{ //选择操作4,即在二叉排序树中进行删除操作

printf(\请输入你想删除的关键字:\ scanf(\ deletebst(root,data); display(root); printf(\ break; } }

printf(\请继续进行相应操作:\ scanf(\ } return 0; }