云题海 - 专业文章范例文档资料分享平台

当前位置:首页 > 北理工数据结构实验3

北理工数据结构实验3

  • 62 次阅读
  • 3 次下载
  • 2025/6/16 8:09:56

为表面上看是没有错误的,真是花蕾大量的时间看才发现的,同时也给了我一个很重要的提示,参数少的时候要看看字符的问题,做程序一定要谨慎。 改成如下正确。

五、用户使用说明

1、本程序的运行环境为DOS操作系统

2、进入程序后,在\输入二叉树的扩展的前序序列\后按照拓展的前序序列(即 空子树处输入*)输入二叉树,回车后程序即运行。 3、程序运行后即在屏幕上输出计算结果。 六、程序运行结果

测试一: 书上127页的二叉树

测试二:书上133页的二叉树

七、程序清单 #include\#include\#define ok 1 #define error 0

9

/* 二叉链表的结点 */ typedef struct BiTNode {

char data;

struct BiTNode * lchild, * rchild; }BiTNode,*BiTree; /* 队列 */

typedef BiTree QElemType; //定义队列元素类型 typedef struct QNode {

QElemType data; struct QNode *next;

}QNode,*QueuePtr; //定义队列结点 typedef struct { QueuePtr front; QueuePtr rear;

}LinkQueue; //定义队列数据类型

char c; //输入的字符

/* 创建队列*/

int InitQueue(LinkQueue &Q) {

Q.front=Q.rear=(QueuePtr)malloc(sizeof(QNode)); if(!Q.front) exit(1); //存储分配失败 Q.front->next=NULL; return ok; }

/*插入元素e作为新的队尾元素*/

int EnQueue( LinkQueue &Q,QElemType e) {

QNode * p=(QueuePtr)malloc(sizeof(QNode)); if(!p) exit(1); p->data=e;

p->next=NULL; Q.rear->next=p; Q.rear=p; return ok; }

/*删除队头元素并以e返回*/

int DeQueue(LinkQueue & Q,QElemType & e) {

if(Q.front==Q.rear) return error;

10

QNode *p=Q.front->next; e=p->data;

Q.front->next=p->next;

if(Q.rear==p) Q.rear=Q.front; free(p); return ok; }

/* 建立二叉树 */

int CreateTree(BiTree & T) { c=getchar(); if(c=='*') T=NULL; else { T=(BiTree)malloc(sizeof(BiTNode)); if(!T) { printf(\ T->data=c; CreateTree(T->lchild); //递归建立左子树 CreateTree(T->rchild); //递归建立右子树 }

return ok; }

int Visit(char e)

{ printf(\ \

/* 先序遍历二叉树 */

int PreOrderTraverse(BiTree T,int (*Visit)( char c)) {

if(T) { Visit(T->data);

PreOrderTraverse(T->lchild,Visit); //先序遍历左子树 PreOrderTraverse(T->rchild,Visit); //先序遍历右子树 }

return ok; }

/* 中序遍历二叉树 */

int InOrderTraverse(BiTree T,int (*Visit)( char c)) {

if(T)

11

{ InOrderTraverse(T->lchild,Visit); //中序遍历左子树 Visit(T->data); InOrderTraverse(T->rchild,Visit); //中序遍历右子树 }

return ok; }

/* 后序遍历二叉树 */

int PostOrderTraverse(BiTree T,int (*Visit)( char c)) {

if(T) { PostOrderTraverse(T->lchild,Visit); //后序遍历左子树 PostOrderTraverse(T->rchild,Visit); //后序遍历右子树 Visit(T->data); }

return ok; }

/*层次遍历二叉树 */

int LevelOrderTraverse(BiTree & T) {

QElemType p; LinkQueue q; InitQueue(q);

if(T) EnQueue(q,T); //队头元素进队列 while(!(q.front==q.rear)) { DeQueue(q,p);

printf(\ \输出队头元素 if(p->lchild) EnQueue(q,p->lchild); //左子树进队列 if(p->rchild) EnQueue(q,p->rchild); //右子树进队列 }

return ok; }

int main() {

BiTree T;

printf(\输入二叉树的扩展的前序序列\\n\ CreateTree(T);

printf(\二叉树的先序序列:\

PreOrderTraverse(T,Visit); printf(\ printf(\二叉树的中序序列:\

InOrderTraverse(T,Visit); printf(\ printf(\二叉树的后序序列:\

12

PostOrderTraverse(T,Visit); printf(\ printf(\二叉树的层次遍历序列:\

LevelOrderTraverse(T); printf(\ return ok; }

13

搜索更多关于: 北理工数据结构实验3 的文档
  • 收藏
  • 违规举报
  • 版权认领
下载文档10.00 元 加入VIP免费下载
推荐下载
本文作者:...

共分享92篇相关文档

文档简介:

为表面上看是没有错误的,真是花蕾大量的时间看才发现的,同时也给了我一个很重要的提示,参数少的时候要看看字符的问题,做程序一定要谨慎。 改成如下正确。 五、用户使用说明 1、本程序的运行环境为DOS操作系统 2、进入程序后,在\输入二叉树的扩展的前序序列\后按照拓展的前序序列(即 空子树处输入*)输入二叉树,回车后程序即运行。 3、程序运行后即在屏幕上输出计算结果。 六、程序运行结果 测试一: 书上127页的二叉树 测试二:书上133页的二叉树 七、程序清单 #include\#include\#define ok 1 #define error 0 9

× 游客快捷下载通道(下载后可以自由复制和排版)
单篇付费下载
限时特价:10 元/份 原价:20元
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信:fanwen365 QQ:370150219
Copyright © 云题海 All Rights Reserved. 苏ICP备16052595号-3 网站地图 客服QQ:370150219 邮箱:370150219@qq.com