数据结构实验报告.docx
- 文档编号:1818882
- 上传时间:2022-10-24
- 格式:DOCX
- 页数:13
- 大小:84.27KB
数据结构实验报告.docx
《数据结构实验报告.docx》由会员分享,可在线阅读,更多相关《数据结构实验报告.docx(13页珍藏版)》请在冰豆网上搜索。
数据结构实验报告
数据结构实验报告
DataStructures
班级:
测绘工程卓越1501
学号:
1510070112
姓名:
张丽
Non-RecursiveimplementationofBinaryTrees'traversals
Chapter1:
Introduction
Experimentalcontent:
UseNon-RecursivealgorithmtoimplementBinaryTree'preordertraversal,inordertraversalandpostordertraversalinturn.
Backgroundofthealgorithms:
ABinaryTreeisatreeinwhichnonodecanhavemorethantwochildren.ThetraversalofaBinaryTreereferstoprocessingeachnodeinthebinarytreeinacertainordersothateachnodecanbeprocessedonlyonce.Abinarytree is composed ofthreeparts:
therootnode,theleft subtree oftheroot node andtherightsubtreeoftherootnode.Therefore,wecantraversetheentireBinaryTreebytraversing the three parts in turn.Iftheleftandrightarelimited,therearethreewaystotraverse:
preordertraversal,inordertraversalandpostordertraversal.Ontheonehand,notalltheprogramminglanguagesallowrecursion.Ontheotherhand,althoughquiteconcise,recursionprogramsaregenerallynotreadableandefficient.Consequently,wewillusingNon-RecursivealgorithmtoimplementBinaryTree'preordertraversal,inordertraversalandpostordertraversalinturn,whichismorecommon.
Chapter2:
AlgorithmSpecification
Inthealgorithm,BinaryTreewillbestoredinbinarylinkedlistandone-dimensionalarray"*stack[MAXSIZE]"willbeusedtoimplementstack.The traversal route is:
Whengoingdeepalongtheleftsubtree,thenodeentersthestack.Ifitispreordertraversal,itshouldbeprocessedbeforeenteringthestack;When it can not go deep along the left subtree,Justreturn.That is, pop up the node
from the stack which entered the stackbefore,and if it is inordertraversal, process
the node now, and then continue to deep from the right subtree of the node;Ifitis
postordertraversal,thenodeshouldbepressedinthestackagain,andthen
continueto deepfromtherightsubtreeofthenode.
(1)preordertraversal:
Inapreordertraversal,theworkatanodeisperformedbeforeitschildrenareprocessed.Thatistosay,wheneveranodeisencountered,itshouldbeprocessed.Thecodeisasfollows:
voidPreOrder(BiTreeT)
{
BiTNode*stack[MAXSIZE],*p;
inttop=-1;
if(T!
=NULL)
{
top++;
stack[top]=T;
while(top>-1)
{
p=stack[top];
top--;
printf("%c",p->data);
if(p->rchild!
=NULL)
{
top++;
stack[top]=p->rchild;
}
if(p->lchild!
=NULL)
{
top++;
stack[top]=p->lchild;
}
}
printf("\n");
}
}
(2)inordertraversal:
Inainordertraversal,theworkatanodeisperformedbetweenitschildrenareprocessed.Thecodeisasfollows:
voidInOrder(BiTreeT)
{
BiTNode*stack[MAXSIZE],*p;
inttop=-1;
if(T!
=NULL)
{
p=T;
while(top>-1||p!
=NULL)
{
while(p!
=NULL)
{
top++;
stack[top]=p;
p=p->lchild;
}
if(top>-1)
{
p=stack[top];
top--;
printf("%c",p->data);
p=p->rchild;
}
}
printf("\n");
}
}
(3)postordertraversal:
Inapostordertraversal,theworkatanodeisperformedafteritschildrenareprocessed.Thecodeisasfollows:
voidPostOrder(BiTreeT)
{
BiTNode*stack[MAXSIZE],*p;
intsign,top=-1;
if(T!
=NULL)
{
do
{
while(T!
=NULL)
{
top++;
stack[top]=T;
T=T->lchild;
}
p=NULL;
sign=1;
while(top!
=-1&&sign)
{
T=stack[top];
if(T->rchild==p)
{
printf("%c",T->data);
top--;
p=T;
}
else
{
T=T->rchild;
sign=0;
}
}
}while(top!
=-1);
printf("\n");
}
}
Chapter3:
SourceCode(inC)
#include
#include
#defineMAXSIZE50
/*定义二叉树结点类型*/
typedefstructnode
{
chardata;
structnode*lchild,*rchild;
}BiTNode,*BiTree;
/*先序创建二叉树*/
voidCreatBiTree(BiTree*T)
{
charch;
ch=getchar();
/*#代表指针为空*/
if(ch=='#')
{
(*T)=NULL;
}
else
{
(*T)=(BiTNode*)malloc(sizeof(BiTNode));
/*建立根结点*/
(*T)->data=ch;
/*递归先序建立左子树*/
CreatBiTree(&(*T)->lchild);
/*递归先序建立右子树*/
CreatBiTree(&(*T)->rchild);
}
}
/*非递归先序遍历二叉树*/
voidPreOrder(BiTreeT)
{
BiTNode*stack[MAXSIZE],*p;
inttop=-1;
if(T!
=NULL)
{
/*根结点入栈*/
top++;
stack[top]=T;
/*栈不空时循环*/
while(top>-1)
{
/*出栈并访问该节点*/
p=stack[top];
top--;
printf("%c",p->data);
/*右孩子入栈*/
if(p->rchild!
=NULL)
{
top++;
stack[top]=p->rchild;
}
/*左孩子入栈*/
if(p->lchild!
=NULL)
{
top++;
stack[top]=p->lchild;
}
}
printf("\n");
}
}
/*非递归中序遍历二叉树*/
voidInOrder(BiTreeT)
{
BiTNode*stack[MAXSIZE],*p;
inttop=-1;
if(T!
=NULL)
{
p=T;
while(top>-1||p!
=NULL)
{
/*访问p的所有左结点并入栈*/
while(p!
=NULL)
{
top++;
stack[top]=p;
p=p->lchild;
}
if(top>-1)
{
/*出栈并访问该结点*/
p=stack[top];
top--;
printf("%c",p->data);
/*访问p的右孩子*/
p=p->rchild;
}
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 实验 报告