实验2二叉排序树查找.docx

上传人:b****5 文档编号:15201628 上传时间:2023-07-02 格式:DOCX 页数:11 大小:16KB
下载 相关 举报
实验2二叉排序树查找.docx_第1页
第1页 / 共11页
实验2二叉排序树查找.docx_第2页
第2页 / 共11页
实验2二叉排序树查找.docx_第3页
第3页 / 共11页
实验2二叉排序树查找.docx_第4页
第4页 / 共11页
实验2二叉排序树查找.docx_第5页
第5页 / 共11页
实验2二叉排序树查找.docx_第6页
第6页 / 共11页
实验2二叉排序树查找.docx_第7页
第7页 / 共11页
实验2二叉排序树查找.docx_第8页
第8页 / 共11页
实验2二叉排序树查找.docx_第9页
第9页 / 共11页
实验2二叉排序树查找.docx_第10页
第10页 / 共11页
实验2二叉排序树查找.docx_第11页
第11页 / 共11页
亲,该文档总共11页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

实验2二叉排序树查找.docx

《实验2二叉排序树查找.docx》由会员分享,可在线阅读,更多相关《实验2二叉排序树查找.docx(11页珍藏版)》请在冰点文库上搜索。

实验2二叉排序树查找.docx

实验2二叉排序树查找

1.建立一棵二叉排序树,存储学生信息,并实现查询功能

#include

#include

usingnamespacestd;

staticinta,b;

typedefstructnode

{

intgrade;

stringname;

intno;

structnode*lchild,*rchild;

}BSTNode;//代表二叉排序树的结点定义

typedefBSTNode*BSTree;//定义二叉排序树

staticBSTNode*t;//定义一个临时结点

BSTNode*SearchBST(BSTreeT,intno)

{

if()

SearchBST(T->lchild,);//补充语句,根据学号向左子树搜索

if(T->==)//补充语句,学号相等,查询成功,获得当前的T结点

t=T;

if(T->rchild!

=NULL&&T->grade!

=a&&T->rchild==NULL&&T->rchild->no==no)

t=T->rchild;

if(T->rchild!

=NULL&&T->rchild->lchild!

=NULL)

SearchBST(T->rchild,);//补充语句,根据学号向右子树搜索

if(T->rchild!

=NULL&&T->grade==b)

{

a=T->rchild->grade;

SearchBST(T->rchild,no);

}

returnt;

}

voidInserBST(BSTree*T,intgrade,stringname,intno)

{//此函数用来插入二叉排序树中的结点来建立二叉排序树

BSTNode*p,*q;

if((*T)==NULL)

{

(*T)=;//补充语句,创建一个新结点

(*T)->grade=;

(*T)->name=;

(*T)->=;//以上三条语句补充完整,创建学号,姓名,成绩构成的学生信息

(*T)->lchild=(*T)->rchild=;//补充语句,将被插入的新结点设置成叶结点标志

}

else

{

p=(*T);

while(p)

{

q=p;

if()//补充判断条件,若grade成绩值小于当前结点,向左子树前进搜索

p=q->lchild;

elseif()//补充判断条件,若grade成绩值大于当前结点,向右子树前进搜索

;

}

p=newBSTNode;

p->grade=grade;

p->name=name;

p->no=no;

p->lchild=p->rchild=NULL;

if(q->grade>grade)

q->lchild=p;

else

q->rchild=p;

}

}

BSTreeCreateBST(void)

{

BSTreeT=NULL;

intgrade,no;

stringname;

cin>>no;

cin>>name;

cin>>grade;

b=a=grade;

while(grade)

{

;//补充语句,调用InserBST函数向二叉排序树插入结点

cin>>no;

cin>>;//补充语句

cin>>;//补充语句

}

returnT;

}

voidListBinTree(BSTreeT)

{//此函数用于按顺序输出二叉排序树(以中序遍历方式输出即可得到有序)

if(T->lchild!

=NULL)

;//补充语句,递归遍历左子树

cout<no<<""<name<<""<grade<

//补充一组语句,向右子树递归遍历

}

voidmain()

{

BSTreeT;

BSTNode*p;

intno;

cout<<"请输入学生信息(输入0为结束标志):

\n";

cout<<"学号姓名成绩\n";

T=;//补充语句调用建立二叉排序函数

cout<<"按成绩构建二叉排序树,存储学生数据成功!

\n\n";

cout<<"52\n";

cout<<"/\\\n";

cout<<"2666\n";

cout<<"/\\\\\n";

cout<<"124599\n";

cout<<"/\\/\n";

cout<<"335089\n";

cout<<"/\n";

cout<<"87\n";

cout<<"\n按成绩由低到高排序:

";

cout<<"\n学号姓名成绩\n";

;//补充语句调用排序函数

printf("\n");

cout<<"请输入所要查询学生的学号:

";

cin>>no;

p=(T,no);//补充语句调用查询函数

if(p==NULL)

cout<<"没有找到”<

\n";

else

{

cout<<"\n学号姓名成绩\n";

cout<no<<""<name<<""<grade<

}

}

#include

#include

usingnamespacestd;

staticinta,b;

typedefstructnode

{

intgrade;

stringname;

intno;

structnode*lchild,*rchild;

}BSTNode;//代表二叉排序树的结点定义

typedefBSTNode*BSTree;//定义二叉排序树

staticBSTNode*t;//定义一个临时结点

BSTNode*SearchBST(BSTreeT,intno)

{

if(T->lchild!

=NULL)

SearchBST(T->lchild,no);//补充语句,根据学号向左子树搜索

if(T->no==no)//补充语句,学号相等,查询成功,获得当前的T结点

t=T;

if(T->rchild!

=NULL&&T->grade!

=a&&T->rchild==NULL&&T->rchild->no==no)

t=T->rchild;

if(T->rchild!

=NULL&&T->rchild->lchild!

=NULL)

SearchBST(T->rchild,no);//补充语句,根据学号向右子树搜索

if(T->rchild!

=NULL&&T->grade==b)

{

a=T->rchild->grade;

SearchBST(T->rchild,no);

}

returnt;

}

voidInserBST(BSTree*T,intgrade,stringname,intno)

{//此函数用来插入二叉排序树中的结点来建立二叉排序树

BSTNode*p,*q;

if((*T)==NULL)

{

(*T)=newBSTNode;//补充语句,创建一个新结点

(*T)->grade=grade;

(*T)->name=name;

(*T)->no=no;//以上三条语句补充完整,创建学号,姓名,成绩构成的学生信息

(*T)->lchild=(*T)->rchild=NULL;//补充语句,将被插入的新结点设置成叶结点标志

}

else

{

p=(*T);

while(p)

{

q=p;

if(p->grade>grade)//补充判断条件,若grade成绩值小于当前结点,向左子树前进搜索

p=q->lchild;

elseif(p->grade

p=q->rchild;//补充判断条件,若grade成绩值大于当前结点,向右子树前进搜索

}

p=newBSTNode;

p->grade=grade;

p->name=name;

p->no=no;

p->lchild=p->rchild=NULL;

if(q->grade>grade)

q->lchild=p;

else

q->rchild=p;

}

}

BSTreeCreateBST(void)

{

BSTreeT=NULL;

intgrade,no;

stringname;

cin>>no;

cin>>name;

cin>>grade;

b=a=grade;

while(grade)

{InserBST(&T,grade,name,no);

//补充语句,调用InserBST函数向二叉排序树插入结点

cin>>no;

cin>>name;//补充语句

cin>>grade;//补充语句

}

returnT;

}

voidListBinTree(BSTreeT)

{//此函数用于按顺序输出二叉排序树(以中序遍历方式输出即可得到有序)

if(T->lchild!

=NULL)

ListBinTree(T->lchild);//补充语句,递归遍历左子树

cout<no<<""<name<<""<grade<

//输出根(双亲)结点

if(T->rchild!

=NULL&&T->grade!

=a&&T->rchild->lchild==NULL)

cout<rchild->no<<""<rchild->name<<""<rchild->grade<

if(T->rchild!

=NULL&&T->rchild->lchild==NULL)

ListBinTree(T->rchild);

if(T->rchild!

=NULL&&T->grade==b)

{

a=T->rchild->grade;

ListBinTree(T->rchild);//补充一组语句,向右子树递归遍历

}

}

voidmain()

{

BSTreeT;

BSTNode*p;

intno;

cout<<"请输入学生信息(输入0为结束标志):

\n";

cout<<"学号姓名成绩\n";

T=CreateBST();//补充语句调用建立二叉排序函数

cout<<"按成绩构建二叉排序树,存储学生数据成功!

\n\n";

cout<<"52\n";

cout<<"/\\\n";

cout<<"2666\n";

cout<<"/\\\\\n";

cout<<"124599\n";

cout<<"/\\/\n";

cout<<"335089\n";

cout<<"/\n";

cout<<"87\n";

cout<<"\n按成绩由低到高排序:

";

cout<<"\n学号姓名成绩\n";

ListBinTree;//补充语句调用排序函数

printf("\n");

cout<<"请输入所要查询学生的学号:

";

cin>>no;

p=SearchBST(T,no);//补充语句调用查询函数

if(p==NULL)

cout<<"没有找到"<

\n";

else

{

cout<<"\n学号姓名成绩\n";

cout<no<<""<name<<""<grade<

}

}

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 医药卫生 > 基础医学

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2