首页 考试资料幻灯片工程技术公务员考试小学教学中学教学大学教学外语资料
数据结构实验书


else

dep2=depth(T->rchild); return } }//depth main(){ BiTree T=NULL; a Binary Treen"); dep1>dep2?dep1+1:dep2+1;

printf("nCreate CreateBiTree(&T);

/*建立一棵二叉树 T*/ is:n"); /*先序遍历二叉树*/ order is:n");

printf("nThe preorder PreOrder(T); printf("nThe level LevleOrder(T); printf("nThe depth } 【测试数据】 1. 输入:#↙,建立一棵空树,

/*层次遍历二叉树*/ is:%dn",depth(T));

先序遍历和层次遍历没有输出,树的深度输出为 0; 2. 输入:A↙ 先序和层次遍历输出均为 A; 深度输出为:1 3. 输入:ABC##DE#G##F###↙, 先序输出为: 层次遍历输出为:A 深度输出为: A B 5 B C D F E G G F

C D E

4. 建立如图 6-6 所示二叉树, 输入: ABD#GJ##K##E##C#FH##IL###↙, B B 5 D G J C D E K F E C G H F H I J I J K L

先序遍历输出为:A 层次遍历输出为:A 深度输出为:

【说明】 1. 按先序次序输入二叉树中结点的值,用'#'表示空树,对每一个结点应当确定其左右子树的值(为空时 必须用特定的空字符占位),故执行此程序时,最好先在纸上画出你想建立的二叉树,每个结点的左右子 树必须确定,若为空,则用特定字符标出,然后再按先序输入这棵二叉树的字符序列; 2. 为了简化程序的书写量,以及程序的清晰性,对结点的访问以一条输出语句表示,若有更复杂的或多种 访问,可以将结点的访问编写成函数,然后通过函数指针进行函数的调用。读者若有兴趣,可自行编写。 3. C 语言函数参数传递,都是“传值”的方式,故在设计函数时,必须注意参数的传递,若想通过函数修 改实际参数的值,必须对指针变量作参数。具体设计时,读者一定要把指针变量、指针变量指向的值等概 念弄清楚; 4. 对于其他算法,请读者参照示例,自行编程完成,以加深学习体会。 【实验题】 在本节的算法描述中已给出了二叉树的非递归算法,请根据此种算法编写 C 语言源程序,实现下述功能, 并上机调试通过。 1. 按中序顺序建立一棵二叉树; 2. 用非递归方式遍历二叉树(先序、中序或后序),输出遍历序列。

第三节

线索二叉树

【问题描述】 1. 对一棵二叉链表表示的二叉树 T 进行线索化(以中序线索化为例); 2. 对线索二叉树进行遍历。 【数据描述】 //- - - 二叉树的二叉线索存储表示 PointerTag; - - -

typedef enum {Link,Thread} typedef struct BiThrNode{ TElemType Struct BiThrNode LTag,RTag; BiThrTree; *

data; lchild, * rchild; //左右孩子指针 //左右标志

PointerTag }BiThrNode, * 【算法描述】 1.

中序遍历建立线索二叉树算法

Status

InorderThreading(BiThrTree

&Thrt,BiThrTree

T)

//中序遍历二叉树 T,并将其中序线索化,Thrt 指向头结点 if (!(Thrt=(BiThrtree) malloc(sizeof(BiThrNode)))) exit (OVERFLOW);

Thrt->Ltag=Link;Thrt->Rtag=Thread;Thrt->rchild=Thrt; If(T==NULL) Thrt->lchild=Thrt; Else {Thrt->lchild=T; pre=Thrt;

InThreading(T); pre->rchild=Thrt;pre->rtag=Thread;Thrt->rchild=pre; } return OK;

}//InorderThreading void if InThreading(BiThrTree (p!=NULL) { InThreading(p->lchild); If If (!p->lchild){p->Ltag=Thread;p->lchild=pre;} (!pre->rchild){pre->Rtag=Thread;pre->rchild=p;} p){

Pre=p; InThreading(p->rchild); } }//InThreding 2.遍历中序线索二叉树 Status InorderTraverse(BiThrTree Thrt);{

//Thrt 指向头结点 p=Thrt->lchild; while (p!=Thrt){ while (p->Ltag==Link) visit(p->data); // p=p->lchild; 访问结点 && p->rchild!=Thrt) {

while (p->Rtag==Thread p=p->rchild; visit(p->data);

} p=p->rchild; } return OK;

}//InorderTraverse 【C 源程序】 #include #include <stdio.h> <stdlib.h>

#define NULL 0 typedef typedef char TElemType; int Status; PointerTag;

typedef enum{Link,Thread} typedef struct BiThrNode{ TElemType data; struct BiThrNode

*lchild,*rchild;

PointerTag

LTag,RTag;

}BiThrNode,*BiThrTree; BiThrTree pre; Status /*pre 为全局变量*/ *T){

CreateBiTree(BiThrTree

/*按先序次序输入二叉树中结点的值,#字符表示空树,*/ /*注意使每个结点的左右标志初始为 Link(即为 0);*/ char ch;

ch=getchar(); if else (ch=='#') (*T)=NULL; { malloc(sizeof(BiThrNode));

(*T)=(BiThrTree) (*T)->data=ch;

(*T)->LTag=(*T)->RTag=Link; CreateBiTree(&(*T)->lchild) CreateBiTree(&(*T)->rchild) ; ;

} return } void InThreading(BiThrTree p){ 1;

if(p){ InThreading(p->lchild); if(p->lchild==NULL) /*p 的左子树线索化*/

{p->LTag=Thread;p->lchild=pre;}/*前驱线索*/

if(pre->rchild==NULL){pre->RTag=Thread;pre->rchild=p;}/*后继线索 pre=p; InThreading(p->rchild); } } Status InorderThreading(BiThrTree *Thrt,BiThrTree T){ /*右子树线索化 /*保持 pre 为 p 的前驱*/

/*中序遍历二叉树 T,并将其中序线索化*/ (*Thrt)=(BiThrTree)malloc(sizeof(BiThrNode)); (*Thrt)->LTag=Link; (*Thrt)->RTag=Thread;(*Thrt)->rchild=(*Thrt);

if(T==NULL) (*Thrt)->lchild=(*Thrt); else { (*Thrt)->lchild=T;pre=(*Thrt); InThreading(T); pre->rchild=(*Thrt);pre->RTag=Thread;(*Thrt)->rchild=pre; } return } Status InorderTraverse(BiThrTree Thrt){ 1;

/*中序遍历线索二叉树 Thrt,Thrt 指向头结点*/ BiThrTree p; p=Thrt->lchild; while (p!=Thrt){ while (p->LTag==Link) p=p->lchild;

printf("%2c",p->data); while (p->RTag==Thread p=p->rchild; printf("%2c",p->data); } p=p->rchild; } return } 1; &&p->rchild!=Thrt) {

123456789101112131415161718192021222324252627282930

 


 

  【Top

最新搜索

 

数据结构实验指导书 - 数据结构 实验指导书 院别 专业 班级 姓名 计算机学院编 实验一 线性表的顺序存储实验 一、实验目的及要求 1、掌握在TC环境下调试顺序表...

数据结构与算法实验指导书90969 - 数据结构与算法实验指导书 计算机与信息学院 实验一 【实验目的】 顺序表 熟练掌握线性表在顺序存储结构上的基本操作。 【实验...

数据结构实验指导书02 很好!很好!隐藏&gt;&gt; 实验二 2.1 实验目的: 线性表 (1)掌握线性表的顺序存储结构的定义及 C 语言实现。 (2)掌握线性表在顺序存储结构即...

数据结构实验说明书新版 - the principl e of simplified E IA of constr uction pr oject s in the regi on. In te...

数据结构实验指导书 - 数据结构实验指导(C语言版)... 数据结构实验指导书_IT/计算机_专业资料。数据结构实验指导(C语言版) 数据结构实验指导书 江西农业大学计算机与...

数据结构试验指导书V2[1].0 - V 2.0 数据结构与算法 实验指导书 编写: 编写:陆绍飞 校核: 校核:___ 湖南大学软件学院 2011 年 9 月 湖南大学软件学...

数据结构实验指导书(2012.9) - 1.2 实验报告(文档)书写规范 实验报告(文档)应包括以下 7 个方面的内容: 1、问题分析 根据对实验任务的理解, 以无歧义的陈述...

09级《数据结构》实验指导书 - 《数据结构实验指导书》 潘向辉/吴学毅编写 印包学院数字媒体技术专业 2011 年 3 月 实验说明 实验说明 【实验环境】 操作系统:...

空间数据结构基础实验指导书 隐藏&gt;&gt; 《空间数据结构基础》 课程实习指导书实习周数:2 周 学分数:2 一、实习目的 数据结构是一门重要的专业基础课,其特点是理论...

《数据结构(C 语言版) 》实验指导书(非计算机专业适用) 广州大学 2013.1 目 录 实验一 线性表的顺序存储及其操作... 1 实验二 线性表的链式存储及其操作......


 

热点推荐