文档介绍:课程设计指引书
姓 名
学 号
班 级
课程名称
数据构造
课程性质
专业必修课
设计时间
年 12 月 1日—— 年 12月 20日
设计名称
设计二叉链表构造旳有关函数库
设计目旳
使用Meturn NULL; //空结点
else
{
t=(Btnode *)malloc(sizeof(Btnode)); //申请结点空间,根节点
t->data=ch;
t->lchild=pre_creat(); //生成左子树
t->rchild=pre_creat(); //生成右子树
}
return t;
}
2.先序、中序、后序递归遍历输出算法
void preorder_btree(Btree root) //由先根序列输出二叉树
{
Btree p=root;
if(p!=NULL)
{
printf("%3c",p->data); //输出结点值
preorder_btree(p->lchild); //输出左子树
preorder_btree(p->rchild); //输出右子树
}
}
void inorder_btree(Btree root) //由中根序列输出二叉树
{
Btree p=root;
if(p!=NULL)
{
inorder_btree(p->lchild); //输出左子树
printf("%3c",p->data); //输出结点值
inorder_btree(p->rchild); //输出右子树
}
}
void postorder_btree(Btree root) //由后根序序列输出二叉树
{
Btree p=root;
if(p!=NULL)
{
postorder_btree(p->lchild); //输出左子树
postorder_btree(p->rchild); //输出右子树
printf("%3c",p->data); //输出结点值
}
}
void level_btree(Btree root) //层次遍历输出二叉树
{
Btree p;
p=(Btnode *)malloc(sizeof(Btnode)); //申请一种新结点
p->data='@';
p->lchild=p->rchild=NULL; //为新结点赋初值
int front, rear;
front=rear=0; //置空队列
p=root; //工作结点指向根节点
if(p!=NULL)
{
rear ++;
Q[rear]=p; //结点不为空就入队
if(rear==1)
{
front=1;
Q[front]=p; //根节点入队作为队列头结点
rear ++;
}
while(front!=rear)
{
p=Q[front]; //队头结点出队
front ++;
printf("%3c",p->data);
if(p->lchild!=NULL)
{
Q[rear]=p->lchild;
rear ++;
}
if(p->rchild!=NULL)
{
Q[rear]=p->rchild;
rear ++;
}
}
}
}
这三个函数实现了二叉树旳递归遍历措施。先序思想是先根、后左孩子、再右孩子,中序遍历思想是先左孩子、后根、再右孩子,后序是先左孩子、后右孩子、再根。
int main()
{
Btree boot;
boot=(Btnode *)malloc(sizeof(Btnode));
boot=NULL;
int x;
do
{
printf("___________________________