2) 对二叉排序树进行先根、中根、和后根非递归遍历
3) 每次对树的修改操作和遍历操作的显示结果都需要在屏幕上用树的形状表示出来。
4) 分别用二叉排序树和数组去存储一个班(50人以上)的成员信息(至少包括学号、姓名、成绩3项),对比查找效率,并说明在什么情况下二叉排序树效率高,为什么?
急用,本人初学,又快交了,无奈。。。财富值不多,会努力赚取并提高悬赏。
二叉排序树实现1) 编程实现二叉排序树,包括生成、插入,删除
答案:1 悬赏:10 手机版
解决时间 2021-02-14 12:54
- 提问者网友:鼻尖触碰
- 2021-02-13 21:05
最佳答案
- 五星知识达人网友:你哪知我潦倒为你
- 2021-02-13 21:52
#include <stdio.h>
struct node { int data;
struct node *lchild;
struct node *rchild;
};
typedef struct node NODE;
(1)递归函数
NODE *search(t, x)
NODE *t;
char x;
{ if (t==NULL)
return(NULL);
else
{ if (t->data==x)
return(t);
if (x<t->data)
return(search(t->lchild));
else
return(search(t->rchild));
}
}
(2)非递归函数 用非递归实现查找,程序同样很简单,但效率比递归程序高的多。
NODE *search(NODE *t, char x)
{ NODE *p;
p=t;
while (p!=NULL)
{ if (p->data==x) return(p);
if (x<p->data)
p=p->lchild;
else
p=p->rchlid;
}
printf(“找不到值为%x的结点!”,x);
return (NULL);
void insert(t, s)
NODE **t, *s
{ if (*t==NULL)
*t=s;
else
{ if (s->data<(*t)->data)
insert(&((*t)->lchild),s);
else if (s->data>(*t)->data)
insert(&((*t)->rchild),s);
else
printf("\n数据%d已在二叉排序树中!", s->data);
}
}
void creat(t)
NODE **t
{ int x;
NODE *s;
printf("\n 输入待排序的数据序列(以-1结束):");
scanf("%d",&x);
while (x!=-1)
{ s=(NODE *)malloc(sizeof(NODE));
s->data=x;
s->lchild=NULL;
s->rchild=NULL;
insert(t,s);
scanf("%d",&x);
}
}
main( )
{ NODE *root=NULL;
printf("\n 创建一棵二叉排序树!");
creat(&root);
printf("二叉排序树中序序列为:");
midorder(root);
} }
void delete(NODE **t,int x)
{ NODE *f,*p,*r;
p=(*t);
f=NULL;
while (p!=NULL&&p->data!=x)
if (x<p->data)
{ f=p;
p=p->lchild;
}
else
{ f=p;
p=p->rchild;
}
if (p==NULL)
printf("找不到键值为 %d的结点\n",x);
else if (p->lchild==NULL)
{ if (f==NULL)
(*t)=p->rchild;
else if (f->lchild==p)
f->lchild=p->rchild;
else
f->rchild=p->rchild;
}
else
{ r=p->lchild;
while (r->rchild!=NULL)
r=r->rchild;
r->rchild=p->rchild;
if (f==NULL)
(*t)=p->lchild;
else if (f->lchild==p)
f->lchild=p->lchild;
else
f->rchild=p->lchild;
}
free(p)
struct node { int data;
struct node *lchild;
struct node *rchild;
};
typedef struct node NODE;
(1)递归函数
NODE *search(t, x)
NODE *t;
char x;
{ if (t==NULL)
return(NULL);
else
{ if (t->data==x)
return(t);
if (x<t->data)
return(search(t->lchild));
else
return(search(t->rchild));
}
}
(2)非递归函数 用非递归实现查找,程序同样很简单,但效率比递归程序高的多。
NODE *search(NODE *t, char x)
{ NODE *p;
p=t;
while (p!=NULL)
{ if (p->data==x) return(p);
if (x<p->data)
p=p->lchild;
else
p=p->rchlid;
}
printf(“找不到值为%x的结点!”,x);
return (NULL);
void insert(t, s)
NODE **t, *s
{ if (*t==NULL)
*t=s;
else
{ if (s->data<(*t)->data)
insert(&((*t)->lchild),s);
else if (s->data>(*t)->data)
insert(&((*t)->rchild),s);
else
printf("\n数据%d已在二叉排序树中!", s->data);
}
}
void creat(t)
NODE **t
{ int x;
NODE *s;
printf("\n 输入待排序的数据序列(以-1结束):");
scanf("%d",&x);
while (x!=-1)
{ s=(NODE *)malloc(sizeof(NODE));
s->data=x;
s->lchild=NULL;
s->rchild=NULL;
insert(t,s);
scanf("%d",&x);
}
}
main( )
{ NODE *root=NULL;
printf("\n 创建一棵二叉排序树!");
creat(&root);
printf("二叉排序树中序序列为:");
midorder(root);
} }
void delete(NODE **t,int x)
{ NODE *f,*p,*r;
p=(*t);
f=NULL;
while (p!=NULL&&p->data!=x)
if (x<p->data)
{ f=p;
p=p->lchild;
}
else
{ f=p;
p=p->rchild;
}
if (p==NULL)
printf("找不到键值为 %d的结点\n",x);
else if (p->lchild==NULL)
{ if (f==NULL)
(*t)=p->rchild;
else if (f->lchild==p)
f->lchild=p->rchild;
else
f->rchild=p->rchild;
}
else
{ r=p->lchild;
while (r->rchild!=NULL)
r=r->rchild;
r->rchild=p->rchild;
if (f==NULL)
(*t)=p->lchild;
else if (f->lchild==p)
f->lchild=p->lchild;
else
f->rchild=p->lchild;
}
free(p)
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯