最新求树和二叉树的深度题目及源程序代码.docx
- 文档编号:8842717
- 上传时间:2023-02-02
- 格式:DOCX
- 页数:12
- 大小:17.52KB
最新求树和二叉树的深度题目及源程序代码.docx
《最新求树和二叉树的深度题目及源程序代码.docx》由会员分享,可在线阅读,更多相关《最新求树和二叉树的深度题目及源程序代码.docx(12页珍藏版)》请在冰豆网上搜索。
最新求树和二叉树的深度题目及源程序代码
树和二叉树
以下问题要求统一在一个大程序里解决。
10、按先序遍历的扩展序列建立二叉树的存储结构
11、二叉树先序、中序、后序遍历的递归算法
12、二叉树中序遍历的非递归算法
13、二叉树层次遍历的非递归算法
14、求二叉树的深度(后序遍历)
15、建立树的存储结构
16、求树的深度
17、
源程序代码:
//tree.cpp:
Definestheentrypointfortheconsoleapplication.
//
#include"stdafx.h"
#include"stdio.h"
#include"stdlib.h"
#defineSTACK_INIT_SIZE100
#defineSTACKINCREMENT10
#defineOK1
#defineERROR0
#defineTRUE1
#defineFALSE0
#defineOVERFLOW-1
typedefcharTElemType;//元素数据类型
typedefintStatus;
/*二叉链表储存结构*/
typedefstructBiTNode{
TElemTypedata;
structBiTNode*lchild,*rchild;
}BiTNode,*BiTree;
boolCreateBiTree(BiTree&T){
//先序序列建立二叉树
charch;
scanf("%c",&ch);
if(ch=='*')T=NULL;
else{
if(!
(T=(BiTNode*)malloc(sizeof(BiTNode))))returnERROR;
T->data=ch;
CreateBiTree(T->lchild);
CreateBiTree(T->rchild);
}
returnOK;
}
StatusPrintElement(TElemTypee){
//访问函数
printf("%c",e);
returnOK;
}
StatusPreOrderTraverse(BiTreeT,Status(*Visit)(TElemType)){
//先序遍历二叉树的递归算法
if(T){
if(Visit(T->data))
if(PreOrderTraverse(T->lchild,Visit))
if(PreOrderTraverse(T->rchild,Visit))returnOK;
returnERROR;
}elsereturnOK;
}
StatusInOrderTraverse(BiTreeT,Status(*Visit)(TElemType)){
//中序遍历二叉树的递归算法
if(T){
if(InOrderTraverse(T->lchild,Visit))
if(Visit(T->data))
if(InOrderTraverse(T->rchild,Visit))returnOK;
returnERROR;
}elsereturnOK;
}
StatusPostOrderTraverse(BiTreeT,Status(*Visit)(TElemType)){
//后序遍历二叉树的递归算法
if(T){
if(PostOrderTraverse(T->lchild,Visit))
if(PostOrderTraverse(T->rchild,Visit))
if(Visit(T->data))returnOK;
returnERROR;
}elsereturnOK;
}
/*栈存储结构及操作
*/
typedefstruct{
BiTree*base;
BiTree*top;
intstacksize;
}Stack;
StatusInitStack(Stack&S){
//构造空栈
S.base=(BiTree*)malloc(STACK_INIT_SIZE*sizeof(BiTree));
if(!
S.base)exit(OVERFLOW);
S.top=S.base;
S.stacksize=STACK_INIT_SIZE;
returnOK;
}
StatusGetTop(StackS,BiTree&e){
//读栈顶元素
if(S.top==S.base)returnERROR;
e=*(S.top-1);
returnOK;
}
StatusPush(Stack&S,BiTreee){
//入栈
if(S.top-S.base>=S.stacksize){
S.base=(BiTree*)realloc(S.base,(S.stacksize+STACKINCREMENT)*
sizeof(BiTree));
if(!
S.base)exit(OVERFLOW);
S.top=S.base+S.stacksize;
S.stacksize+=STACKINCREMENT;
}
*S.top++=e;
returnOK;
}
StatusPop(Stack&S,BiTree&e){
//出栈
if(S.top==S.base)returnERROR;
e=*--S.top;
returnOK;
}
StatusStackEmpty(StackS){
//判栈空
if(S.base==S.top)returnTRUE;
elsereturnFALSE;
}
StatusInOrderTraverse2(BiTreeT,Status(*Visit)(TElemType)){
//中序遍历二叉树的非递归算法
StackS;
BiTreep;
InitStack(S);Push(S,T);
while(!
StackEmpty(S)){
while(GetTop(S,p)&&p)Push(S,p->lchild);
Pop(S,p);
if(!
StackEmpty(S)){
Pop(S,p);
if(!
Visit(p->data))returnERROR;
Push(S,p->rchild);
}
}
returnOK;
}
#defineMAXLEN100
voidLevelOrderTraverse(BiTreeT,Status(*Visit)(TElemType)){
//层次遍历二叉树
structnode
{
BiTreevec[MAXLEN];
intf,r;
}q;
q.f=0;
q.r=0;
if(T!
=NULL)Visit(T->data);
q.vec[q.r]=T;
q.r=q.r+1;
while(q.f T=q.vec[q.f];q.f=q.f+1; if(T->lchild! =NULL){ Visit(T->lchild->data); q.vec[q.r]=T->lchild; q.r=q.r+1; } if(T->rchild! =NULL){ Visit(T->rchild->data); q.vec[q.r]=T->rchild; q.r=q.r+1; } } } intBiTreeDepth(BiTreeT){ //求二叉树的深度 intdepthval,depthLeft,depthRight; if(! T)depthval=0; else{ depthLeft=BiTreeDepth(T->lchild); depthRight=BiTreeDepth(T->rchild); depthval=1+(depthLeft>depthRight? depthLeft: depthRight); } returndepthval; } /*树的二叉链表储存结构*/ typedefstructCSNode{ TElemTypedata; structCSNode*firstchild,*nextsibling; }CSNode,*CSTree; /*队列存储结构及操作 */ typedefstructQNode{ CSTreedata; structQNode*next; }QNode,*QueuePtr; typedefstruct{ QueuePtrfront; QueuePtrrear; }LinkQueue; StatusInitQueue(LinkQueue&Q){ //构造空队列 Q.front=Q.rear=(QueuePtr)malloc(sizeof(QNode)); if(! Q.front)exit(OVERFLOW); Q.front->next=NULL; returnOK; } StatusDestoryQueue(LinkQueue&Q){ //销毁队列 while(Q.front){ Q.rear=Q.front->next; free(Q.front); Q.front=Q.rear; } returnOK; } StatusEnQueue(LinkQueue&Q,CSTreee){ //入队 QueuePtrp; p=(QueuePtr)malloc(sizeof(QNode)); if(! p)exit(OVERFLOW); p->data=e;p->next=NULL; Q.rear->next=p; Q.rear=p; returnOK;} StatusDeQueue(LinkQueue&Q,CSTree&e){ //出队 QueuePtrp; if(Q.front==Q.rear)returnERROR; p=Q.front->next; e=p->data; Q.front->next=p->next; if(Q.rear==p)Q.rear=Q.front; free(p); returnOK; } StatusGetHead(LinkQueue&Q,CSTree&e){ //读队头 QueuePtrp; if(Q.front==Q.rear)returnERROR; p=Q.front->next; e=p->data; returnOK; } CSTreeGetTreeNode(TElemTypee){ //建立树的孩子 //-兄弟链表结点 CSTreep; p=(CSTree)malloc(sizeof(CSNode)); if(! p)exit(OVERFLOW); p->data=e; p->firstchild=NULL; p->nextsibling=NULL; returnp; } StatusCreatTree(CSTree&T){ //建立树的孩子 //-兄弟链表 charfirst='',second=''; intresult=0; LinkQueueQ; CSTreep,s,r; InitQueue(Q); T=NULL; for(scanf("%c%c",&first,&second);second! ='#';result=scanf("%c%c",&first, &second)){ p=GetTreeNode(second); EnQueue(Q,p); if(first=='#')T=p; else{ GetHead(Q,s); while(s->data! =first){ DeQueue(Q,s);GetHead(Q,s); } if(! (s->firstchild)){ s->firstchild=p; r=p; }else{ r->nextsibling=p; r=p; } } } returnOK; } intTreeDepth(CSTreeT){ //求树的深度 inth1,h2; if(! T)return0; else{ h1=TreeDepth(T->firstchild); h2=TreeDepth(T->nextsibling); return(((h1+1)>h2)? (h1+1): h2); } } intmain(intargc,char*argv[]) { BiTreetestT; printf("请输入二叉树先序序列(如AB*C***): "); CreateBiTree(testT); printf("\n"); printf("二叉树的深度是: "); printf("%d",BiTreeDepth(testT)); printf("\n"); printf("先序递归遍历顺序: "); PreOrderTraverse(testT,PrintElement); printf("\n"); printf("中序递归遍历顺序: "); InOrderTraverse(testT,PrintElement); printf("\n"); printf("后序递归遍历顺序: "); PostOrderTraverse(testT,PrintElement); printf("\n"); printf("层次非递归遍历顺序: "); LevelOrderTraverse(testT,PrintElement); printf("\n"); printf("中序非递归遍历顺序: "); InOrderTraverse2(testT,PrintElement); 4.WWW。 google。 com。 cn。 大学生政策2004年3月23日printf("\n\n"); 6、你购买DIY手工艺制品的目的有那些? (二)DIY手工艺品的“热卖化”while(getchar()! ='\n');//清除缓冲区字符 除了“漂亮女生”形成的价格,优惠等条件的威胁外,还有“碧芝”的物品的新颖性,创意的独特性等,我们必须充分预见到。 上述所示的上海经济发展的数据说明: 人们收入水平的增加,生活水平的提高,给上海的饰品业带来前所未有的发展空间,为造就了一个消费额巨大的饰品时尚市场提供了经济基础。 使大学生对DIY手工艺品的时尚性消费,新潮性消费,体验性消费成为可能。 CSTreetestT2; “碧芝自制饰品店”拥有丰富的不可替代的异国风采和吸引人的魅力,理由是如此的简单: 世界是每一个国家和民族都有自己的饰品文化,将其汇集进行再组合可以无穷繁衍。 6、你购买DIY手工艺制品的目的有那些? printf("自上而下自左至右输入树的各条边(如#AABACADCECFEG##): "); CreatTree(testT2); printf("\n"); 1、作者: 蒋志华《市场调查与预测》,中国统计出版社2002年8月§11-2市场调查分析书面报告printf("树的深度是: "); 3、你是否购买过DIY手工艺制品? printf("%d",TreeDepth(testT2)); printf("\n"); return0; 9、如果你亲戚朋友送你一件DIY手工艺制品你是否会喜欢? }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 最新 二叉 深度 题目 源程序 代码
![提示](https://static.bdocx.com/images/bang_tan.gif)