求树和二叉树的深度题目及源程序代码.doc
- 文档编号:1644044
- 上传时间:2022-10-23
- 格式:DOC
- 页数:12
- 大小:67.50KB
求树和二叉树的深度题目及源程序代码.doc
《求树和二叉树的深度题目及源程序代码.doc》由会员分享,可在线阅读,更多相关《求树和二叉树的深度题目及源程序代码.doc(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=
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 二叉 深度 题目 源程序 代码