二叉树的建立和后序遍历的演示

2026/4/23 14:49:44

武汉理工大学《数据结构》课程设计说明书

题 目: 二叉树的建立和后序遍历的演示 初始条件:

理论:学习了《数据结构》课程,掌握了基本的数据结构和常用的算

法;

实践:计算机技术系实验室提供计算机及软件开发环境。

要求完成的主要任务: (包括课程设计工作量及其技术要求,以及说明书撰写

等具体要求)

1、系统应具备的功能:

(1)选择树的存储结构,建立二叉树

(2)用递归算法和非递归算法实现二叉树的后序遍历 2、数据结构设计; 3、主要算法设计; 4、编程及上机实现;

5、撰写课程设计报告,包括: (1)设计题目;

(2)摘要和关键字(中文和英文);

(3)正文,包括引言、需求分析、数据结构设计、算法设计、程序实现

及测试、不足之处、设计体会等; (4)结束语; (5)参考文献。

时间安排: 2007年7月2日-7日 (第18周)

7月2日 查阅资料

7月3日 系统设计,数据结构设计,算法设计 7月4日-5日 编程并上机调试 7月6日 撰写报告

7月7日 验收程序,提交设计报告书。

指导教师签名: 2007年7月6日 系主任(或责任教师)签名: 2007年 月 日

二叉树的建立和后序遍历演示

周其凤 计算机0502班

武汉理工大学《数据结构》课程设计说明书

摘要:该程序的主要部分有:建立一个二叉树以及二叉树的后序遍历算法的演示。

关键字:二叉树 ,左右子树,根结点,后序遍历

0. 引言

设计不同的结点结构可构成不同形式的链式存储结构。由二叉树的定义

得知,二叉树的结点由一个数据元素和分别指向其左、右子树的两个分支构成,则表示二叉树的链表中的结点至少包含三个域:数据域和左、右指针域。利用这种结点结构所得的二叉树的存储结构称之为二叉链表。

遍历二叉树即如何按某条搜索路径巡访树中每个结点,使得每个结点均被访问一次,而且仅被访问一次。

后序遍历二叉树的操作定义为:

若二叉树为空,则空操作;否则

(1)后序遍历左子树; (2)后序遍历右子树; (3)访问根结点。

1. 需求分析:

1.1 先序次序输入建立二叉树;

1.2后序遍历二叉树的递归算法; 1.3 后序遍历二叉树的非递归算法。

2.数据结构设计:

//-------二叉树的链表存储表示------- typedef struct BiTNode { char data;

struct BiTNode *lchild,*rchild; //左右孩子指针 }BiTNode,*BiTree;

//-------基本操作的函数原型说明(部分)--------- Status CreateBiTree(BiTree &T);

//按先序次序输入二叉树中结点的值(一个字符),空格字符表示空树

武汉理工大学《数据结构》课程设计说明书

//构造二叉链表表示的二叉树T.

Status PreOrderTraverse(BiTree T,Status(*Visit)(TElemType e));\\ //采用二叉链表存储结构,Visit是对结点操作的应用函数。 //先序遍历二叉树T,对每个结点调用函数Visit一次且仅一次。 //一旦Visit()失败,则操作失败。

Status inOrderTraverse(BiTree T,Status(*Visit)(TElemType e));\\ //采用二叉链表存储结构,Visit是对结点操作的应用函数。 //中序遍历二叉树T,对每个结点调用函数Visit一次且仅一次。 //一旦Visit()失败,则操作失败。

Status PostOrderTraverse(BiTree T,Status(*Visit)(TElemType e));\\ //采用二叉链表存储结构,Visit是对结点操作的应用函数。 //后序遍历二叉树T,对每个结点调用函数Visit一次且仅一次。 //一旦Visit()失败,则操作失败。

Status LevelOrderTraverse(BiTree T,Status(*Visit)(TElemType e));\\ //采用二叉链表存储结构,Visit是对结点操作的应用函数。 //层次遍历二叉树T,对每个结点调用函数Visit一次且仅一次。 //一旦Visit()失败,则操作失败。

3.算法设计:

3.1 先序建立二叉树

这个函数主要是生成二叉树。

void CreateBiTree(BiTree *T) {

//按先序次序输入二叉树中结点的值(一个字符),空格字符表示空树 //构造二叉链表表示的二叉树T. char ch; ch=tree[ti++]; if(ch==NULL) return; if(ch==' ') *T=NULL;

武汉理工大学《数据结构》课程设计说明书

else {

*T=(BiTree)malloc(sizeof(BiTNode)); (*T)->data=ch;

//生成根结点

//构造左子树 //构造右子树

CreateBiTree(&(*T)->lchild); CreateBiTree(&(*T)->rchild); } }

3.2 二叉树的后序遍历演示算法:

3.2.1二叉树的后序遍历递归算法:

void PostOrder(BiTree T) {

if(T) {

PostOrder(T->lchild); PostOrder(T->rchild); printf(\ } }

3.2.2采用”标记栈法“的后序遍历非递归算法(while-while形式)

void PostOrder_zb(BiTree t) {

int tag[100],top=0; /*tag为标记栈*/

BiTree stack[100]; while(t||top) {

while(t) { stack[++top]=t;

tag[top]=0; /*标记栈置为0:第一次访问*/ t=t->lchild; }

if(top) {

if(tag[top]==1) {printf(\如果这个结点访问了两次,输出之*/


二叉树的建立和后序遍历的演示.doc 将本文的Word文档下载到电脑
搜索更多关于: 二叉树的建立和后序遍历的演示 的文档
相关推荐
相关阅读
× 游客快捷下载通道(下载后可以自由复制和排版)

下载本文档需要支付 10

支付方式:

开通VIP包月会员 特价:29元/月

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信:xuecool-com QQ:370150219