文档介绍:.
19 / 19
《数据结构与算法》实验报告三
——二叉树的操作与应用
实验目的
熟悉二叉链表存储结构的特征,掌握二叉树遍历操作与其应用
实验要求〔题目〕
说明:以下题目中〔一〕为全体必做,〔二〕〔三〕任选其一完成
从
CreateBiTree<&<<*bt>->rchild>>;
}
}
void PreOder<BiTree root>
{if<root!=NULL>
{printf<"%4c",root->data>;
PreOder<root->lchild>;
PreOder<root->rchild>;
}
}
main<>
{
BiTree root;
CreateBiTree<&root>;
printf<"先序遍历:\n">;
PreOder<root>;
}
递归算法:
#include""
#define PR printf
#define ERROR 0
.
5 / 19
#define MAX 100
/*============================建立各结构体===============================*/
typedefstruct node
{
char data; /*数据域*/
struct node *lchild;
struct node *rchild; /*结点的左右指针,分别指向结点的左右孩子*/
}BTNode;
typedef BTNode *DataType;
typedefstruct
{
DataType data[MAX];
int top;
}SeqStack;
SeqStack *s;
/*============================栈的操作===================================*/
SeqStack *createemptystacks<> /*创建一个空栈*/
{
SeqStack *s;
s=<SeqStack*>malloc<sizeof<SeqStack>>;
.
6 / 19
s->top=0;
return s;
}
int stackemptys<SeqStack *s> /*判栈空*/
{
return s->top==0;
}
int stackfulls<SeqStack *s> /*判栈满*/
{
return s->top==MAX;
}
void pushs<SeqStack *s,DataType x> /*进栈*/
{
if<stackfulls<s>>
PR<"over flow\n">;
else
s->data[s->top++]=x;
}
void pops<SeqStack *s> /*退栈*/
{
if<stackemptys<s>>
PR<"underflow\n">;
.
7 / 19
else
s->top--;
}
DataType gettops<SeqStack *s> /*栈非空时取栈顶元素*/
{
return s->data[s->top-1];
}
/*============================建立二叉树==================================*/
BTNode *createbintree<> /*输入扩充的先序序列,建立二叉树*/
{
BTNode *t;
char x;
scanf<"%c",&x>;
if<x=='#'>
t=NULL; /*读入#,返回空指针 */
else
{
t=<BTNode *>malloc<sizeof<BTNode>>; /*生成结点*/
t->data=x;
t->lchild=createbintree<>; /*构造左子树*/
t->rchild=createbintree<>; /*构造右子树*/
.
8 / 19
}
return<t>;
}
/*==============================树的遍历===================================*/
void preorder<BTNode *t> /*NLR 先序遍历*/
{
if<t!=NULL>
{
PR<" %