大大数据结构实验报告材料Word格式文档下载.docx
《大大数据结构实验报告材料Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《大大数据结构实验报告材料Word格式文档下载.docx(16页珍藏版)》请在冰豆网上搜索。
![大大数据结构实验报告材料Word格式文档下载.docx](https://file1.bdocx.com/fileroot1/2022-10/29/ebe91d14-f319-45ed-b73d-733a46a81106/ebe91d14-f319-45ed-b73d-733a46a811061.gif)
//数据域
structBiTNode*lChild,*rChild;
//左右子树域
}BiTNode,*BiTree;
intInsertBST(BiTree&
T,intkey){//插入二叉树函数
if(T==NULL)
{
T=(BiTree)malloc(sizeof(BiTNode));
T->
data=key;
lChild=T->
rChild=NULL;
return1;
}
elseif(key<
T->
data){
InsertBST(T->
lChild,key);
}
elseif(key>
InsertBST(T->
rChild,key);
else
return0;
BiTreeCreateBST(inta[],intn){//创建二叉树函数
BiTreebst=NULL;
inti=0;
while(i<
n){
InsertBST(bst,a[i]);
i++;
returnbst;
intDelete(BiTree&
T)
{
BiTreeq,s;
if(!
(T)->
rChild){//右子树为空重接它的左子树
q=T;
T=(T)->
lChild;
free(q);
}else{
if(!
lChild){//若左子树空则重新接它的右子树
q=T;
T=(T)->
rChild;
}else{
s=(T)->
while(s->
rChild){
q=s;
s=s->
}
(T)->
data=s->
data;
//s指向被删除结点的前驱
if(q!
=T)
q->
rChild=s->
else
lChild=s->
free(s);
}
return1;
}
//删除函数,在T中删除key元素
intDeleteBST(BiTree&
T,intkey){
T)return0;
else{
if(key==(T)->
data)returnDelete(T);
else{
if(key<
data)
returnDeleteBST(T->
intPosttreeDepth(BiTreeT){//求深度
inthr,hl,max;
T==NULL){
hl=PosttreeDepth(T->
lChild);
hr=PosttreeDepth(T->
rChild);
max=hl>
hr?
hl:
hr;
returnmax+1;
else
voidprinttree(BiTreeT,intnlayer){//打印二叉树
if(T==NULL)return;
printtree(T->
rChild,nlayer+1);
for(inti=0;
i<
nlayer;
i++){
printf("
"
);
%d\n"
T->
data);
lChild,nlayer+1);
voidPreOrderNoRec(BiTreeroot)//先序非递归遍历
{
BiTreep=root;
BiTreestack[50];
intnum=0;
while(NULL!
=p||num>
0)
while(NULL!
=p)
{
printf("
%d"
p->
stack[num++]=p;
p=p->
num--;
p=stack[num];
p=p->
\n"
voidInOrderNoRec(BiTreeroot)//中序非递归遍历
printf("
voidPostOrderNoRec(BiTreeroot)//后序非递归遍历
BiTreehave_visited=NULL;
p=stack[num-1];
if(NULL==p->
rChild||have_visited==p->
rChild)
num--;
have_visited=p;
p=NULL;
else
intmain(){//主函数
---------------------二叉排序树的实现-------------------"
intlayer;
inti;
intnum;
输入节点个数:
"
scanf("
%d"
&
num);
依次输入这些整数(要不相等)"
int*arr=(int*)malloc(num*sizeof(int));
for(i=0;
num;
scanf("
arr+i);
BiTreebst=CreateBST(arr,num);
二叉树创建成功!
layer=PosttreeDepth(bst);
树状图为:
printtree(bst,layer);
intj;
intT;
intK;
for(;
;
){
loop:
***********************按提示输入操作符************************:
1:
插入节点2:
删除节点3:
打印二叉树4:
非递归遍历二叉树5:
退出"
j);
switch(j){
case1:
输入要插入的节点:
scanf("
T);
InsertBST(bst,T);
插入成功!
printf("
printtree(bst,layer);
break;
case2:
输入要删除的节点"
K);
DeleteBST(bst,K);
删除成功!
case3:
layer=PosttreeDepth(bst);
case4:
非递归遍历二叉树"
先序遍历:
PreOrderNoRec(bst);
中序遍历:
InOrderNoRec(bst);
后序遍历:
PostOrderNoRec(bst);
case5:
程序执行完毕!
return0;
gotoloop;
return0;
对于第四小问,要储存学生的三个信息,需要把上面程序修改一下,二叉树结构变为
typedefstringSlemType;
SlemTypename;
ElemTypescore;
ElemTypeno;
参数不是key,而是另外三个
T,intno,intscore,stringname){//插入二叉树函数
no=no;
name=name;
score=score;
elseif(no<
no){
lChild,no,score,name);
elseif(k