实验五 二叉树的表示与实现(二)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验五二叉树的表示与实现(二)
一、实验目的
1.熟悉二叉树的存储结构与表示方法。
2.掌握二叉树的二叉链表结构设计与实现。
3.掌握二叉树结点构造,二叉树构造、各种遍历算法、计算高度等操作
二、实验内容
1.二叉树的结构设计及递归遍历
2.二叉树的非递归遍历、层序遍历
三、实验要求
1.认真阅读和掌握本实验的算法。
2.上机运行写出的程序,并且独立调试通过。
四、实验步骤
2、二叉树的非递归中序遍历和层序遍历实现
/*二叉树的非递归中序遍历*/
void InOrder (Bitree *root,Stack s)
{
//InitStack(S);
Node* p=NewNode();
Push(&s,root); //根指针进栈
while (!IsEmpty(s))
{
StackTop(s,&p);
while(p)
{
Push(&s,p->Lchild); //向左走到头
p=p->Lchild;
}
Pop(&s); //空指针退栈
if (!IsEmpty(s))
{
StackTop(s,&p);
Pop(&s);
printf("%d ",p->data);//访问结点
Push(&s,p->Rchild); //向右
} //if
}//while
}//InOrder
/*层序遍历实现*/
void FloorOrder (Bitree *root,cqueue q)
{
Node* p=NewNode();
Append(&q,root); //根指针入队
while (!IsEmpty(q))
{
Serve(q,&p);
printf("%d ",p->data);//访问结点
if(p->Lchild!=NULL)
{
Append(&q,p->Lchild);//左孩子入队
}
if(p->Rchild!=NULL)
{
Append(&q,p->Rchild);//右孩子入队
}
}//while
}//FloorOrder
提示:1、该程序需要在上一次实验程序的基础上编写。
2、非递归中序遍历要使用以前写过的栈
3、层序遍历要使用以前写过的队列。