当前位置:网站首页>6-9 二叉树的遍历(25分)
6-9 二叉树的遍历(25分)
2022-08-07 01:41:00 【jie3606】
本题要求给定二叉树的4种遍历。
函数接口定义:
void InorderTraversal( BinTree BT );
void PreorderTraversal( BinTree BT );
void PostorderTraversal( BinTree BT );
void LevelorderTraversal( BinTree BT );
其中BinTree结构定义如下:
typedef struct TNode *Position;
typedef Position BinTree;
struct TNode{
ElementType Data;
BinTree Left;
BinTree Right;
};
``要求4个函数分别按照访问顺序打印出结点的内容,格式为一个空格跟着一个字符。
裁判测试程序样例:
#include <stdio.h>
#include <stdlib.h>
typedef char ElementType;
typedef struct TNode *Position;
typedef Position BinTree;
struct TNode{
ElementType Data;
BinTree Left;
BinTree Right;
};
BinTree CreatBinTree(); /* 实现细节忽略 */
void InorderTraversal( BinTree BT );
void PreorderTraversal( BinTree BT );
void PostorderTraversal( BinTree BT );
void LevelorderTraversal( BinTree BT );
int main()
{
BinTree BT = CreatBinTree();
printf("Inorder:"); InorderTraversal(BT); printf("\n");
printf("Preorder:"); PreorderTraversal(BT); printf("\n");
printf("Postorder:"); PostorderTraversal(BT); printf("\n");
printf("Levelorder:"); LevelorderTraversal(BT); printf("\n");
return 0;
}
/* 你的代码将被嵌在这里 */
输出样例(对于图中给出的树):
Inorder: D B E F A G H C I
Preorder: A B D F E C G H I
Postorder: D E F B H G I C A
Levelorder: A B C D F G I E H
解答
void InorderTraversal( BinTree BT ){
if(BT == NULL) return;
InorderTraversal(BT->Left);
printf(" %c",BT->Data);
InorderTraversal(BT->Right);
}
void PreorderTraversal( BinTree BT ){
if(BT == NULL) return;
printf(" %c",BT->Data);
PreorderTraversal(BT->Left);
PreorderTraversal(BT->Right);
}
void PostorderTraversal( BinTree BT ){
if(BT == NULL) return;
PostorderTraversal(BT->Left);
PostorderTraversal(BT->Right);
printf(" %c",BT->Data);
}
/*typedef struct QNode{ BinTree data[100]; int base , top; }QNode,*queue; queue initqueue(){ queue q = (queue) malloc(sizeof (QNode)); q->base = 0; q->top = 0; return q; } void pop(queue q){ if(q->top != q->base) q->base++; } BinTree front(queue q){ return q->data[q->base]; } void push(queue q,BinTree e){ if(q->top < 100){ q->data[q->top++] = e; } } int size(queue q){ return q->top - q->base; } typedef enum {false,true} bool; bool isEmpty(queue q){ return q->base == q->top?true:false; } void LevelorderTraversal( BinTree BT ){ if(BT == NULL) return ; queue q = initqueue(); push(q,BT); while (!isEmpty(q)){ int count = size(q); for(int i = 0;i<count;i++){ BinTree tree = front(q); printf("%c ",tree->Data); pop(q); if(tree ->Left!=NULL) push(q,tree->Left); if(tree -> Right != NULL) push(q,tree->Right); } } }*/
void LevelorderTraversal( BinTree BT ) {
if (BT == NULL) return;
BinTree queue[100];
int base = 0;
int front = 0;
//queue q = initqueue();
// push(q, BT);
queue[front++] = BT;
while (base<front) {
int count = front - base;
for (int i = 0; i < count; i++) {
BinTree tree = queue[base];
printf(" %c", tree->Data);
base++;
if (tree->Left != NULL) queue[front++] = tree ->Left;
if (tree->Right != NULL) queue[front++] = tree ->Right;
}
}
}
完整的程序
#include <stdio.h>
#include <stdlib.h>
typedef char ElementType;
typedef struct TNode *Position;
typedef Position BinTree;
struct TNode{
ElementType Data;
BinTree Left;
BinTree Right;
};
BinTree CreatBinTree(); /* 实现细节忽略 */
void InorderTraversal( BinTree BT );
void PreorderTraversal( BinTree BT );
void PostorderTraversal( BinTree BT );
void LevelorderTraversal( BinTree BT );
int main()
{
freopen("/root/tmp/c_data_structure/std.in","r", stdin);
BinTree BT = CreatBinTree();
printf("Inorder:"); InorderTraversal(BT); printf("\n");
printf("Preorder:"); PreorderTraversal(BT); printf("\n");
printf("Postorder:"); PostorderTraversal(BT); printf("\n");
printf("Levelorder:"); LevelorderTraversal(BT); printf("\n");
return 0;
}
/* 你的代码将被嵌在这里 */
BinTree CreatBinTree() {
ElementType dada;
scanf("%c",&dada);
if(dada =='-'){
return NULL;
}
BinTree root = (BinTree) malloc(sizeof (struct TNode));
root->Data = dada;
root->Left = CreatBinTree();
root->Right = CreatBinTree();
return root;
}
void InorderTraversal( BinTree BT ){
if(BT == NULL) return;
InorderTraversal(BT->Left);
printf(" %c",BT->Data);
InorderTraversal(BT->Right);
}
void PreorderTraversal( BinTree BT ){
if(BT == NULL) return;
printf(" %c",BT->Data);
PreorderTraversal(BT->Left);
PreorderTraversal(BT->Right);
}
void PostorderTraversal( BinTree BT ){
if(BT == NULL) return;
PostorderTraversal(BT->Left);
PostorderTraversal(BT->Right);
printf(" %c",BT->Data);
}
/*typedef struct QNode{ BinTree data[100]; int base , top; }QNode,*queue; queue initqueue(){ queue q = (queue) malloc(sizeof (QNode)); q->base = 0; q->top = 0; return q; } void pop(queue q){ if(q->top != q->base) q->base++; } BinTree front(queue q){ return q->data[q->base]; } void push(queue q,BinTree e){ if(q->top < 100){ q->data[q->top++] = e; } } int size(queue q){ return q->top - q->base; } typedef enum {false,true} bool; bool isEmpty(queue q){ return q->base == q->top?true:false; } void LevelorderTraversal( BinTree BT ){ if(BT == NULL) return ; queue q = initqueue(); push(q,BT); while (!isEmpty(q)){ int count = size(q); for(int i = 0;i<count;i++){ BinTree tree = front(q); printf("%c ",tree->Data); pop(q); if(tree ->Left!=NULL) push(q,tree->Left); if(tree -> Right != NULL) push(q,tree->Right); } } }*/
void LevelorderTraversal( BinTree BT ) {
if (BT == NULL) return;
BinTree queue[100];
int base = 0;
int front = 0;
//queue q = initqueue();
// push(q, BT);
queue[front++] = BT;
while (base<front) {
int count = front - base;
for (int i = 0; i < count; i++) {
BinTree tree = queue[base];
printf(" %c", tree->Data);
base++;
if (tree->Left != NULL) queue[front++] = tree ->Left;
if (tree->Right != NULL) queue[front++] = tree ->Right;
}
}
}
边栏推荐
- Love in storage: cookies, local storage, session storage
- 如何分析友盟上给出的错误分析(stack trace)?
- NoSuchMethodError异常解析
- 论文解读《PCT: Point cloud transformer》
- Redis(六) 主从模式
- 电话订货、线下赊账、人工打单,批发生意越做越简单
- 【8.6】代码源 - 【前缀集】【矩阵游戏】【谁才是最终赢家?】
- EventBus Series: User Guide for Index Subscriber Index in Event Bus 3.0
- 比特与字节
- 【第七篇】商城系统-商品发布-SKU和SPU管理
猜你喜欢

ECCV 2022 Oral | 无需微调即可泛化!RegAD:少样本异常检测新框架

【第七篇】商城系统-商品发布-SKU和SPU管理

论文解读《PCT: Point cloud transformer》

Positive and negative (polarity) detection case of components

饶毅:我为什么用了九年才获得博士学位?

普林斯顿微积分读本04第三章--极限导论

1323_STM32F103_ADC test

Multiple Dockets with the same group name are not supported.The following duplicate groups were disc

【8.5】代码源 - 【GCD】【序列中位数】【最大连边数量】

【第六篇】商城系统-实现规格参数和销售属性
随机推荐
English语法_介词 - 表地点
【LeetCode】14080.数组中的字符串匹配
mmdetection模型的评价工具
【LeetCode】1894.找到需要补充粉笔的学生
Love in storage: cookies, local storage, session storage
The main reasons and solutions for optical module failures
饶毅:我为什么用了九年才获得博士学位?
P4315 "Maojing Tree" (tree chain division)
Error when connecting to MySQL: 2059 - authentication plugin 'caching_sha2_password' cannot be loaded...
普通莫队小结
The homestead cannot sell, permanent lease is feasible
开启了j-proxy, 会导致xcode无法正常连接到app store和开发者中心
Positive and negative (polarity) detection case of components
Qt QTreeWidet控件详解
gorm cannot update fields with foreign keys
word中使用latex语言编写公式,
光模块故障的主要原因及解决办法
下载安装和使用Nvm
申请google drive api并使用rclone挂载团队盘为本地磁盘
HTB-Sunday