当前位置: 首页 > news >正文

PTA 6-9 二叉树的遍历

本题要求给定二叉树的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 ){ BinTree s[100]; int top = -1; BinTree p = BT; if(p==NULL) return; while(p!=NULL||top!=-1){ if(p!=NULL){ s[++top] = p; p = p->Left; }else{ p = s[top--]; printf(" %c",p->Data); p = p->Right; } } }

先序:

//先序 void PreorderTraversal( BinTree BT ){ BinTree s[100]; int top = -1; BinTree p = BT; if(p==NULL) return; s[++top] = p; while(top!=-1){ p = s[top--]; printf(" %c",p->Data); if(p->Right) s[++top] = p -> Right; if(p->Left) s[++top] = p-> Left; } }

先序输出叶结点:

void PreorderPrintLeaves( BinTree BT ){ BinTree s[100]; int top = -1; BinTree p = BT; if(p==NULL) return; s[++top] = p; while(top!=-1){ p = s[top--]; if(p->Left == NULL && p->Right == NULL){ printf(" %c",p->Data); } if(p->Right) s[++top] = p->Right; if(p->Left) s[++top] = p->Left; } }

后序:

//后序 void PostorderTraversal( BinTree BT ){ BinTree s[100]; int top = -1; BinTree p = BT; BinTree last = NULL; while(p!=NULL || top!=-1){ if(p!=NULL){ s[++top] = p; p = p->Left; }else{ p = s[top]; if(p->Right!=NULL &&p->Right!=last){ p = p->Right; }else{ p = s[top--]; printf(" %c",p->Data); last = p; p = NULL; } } } }

层次遍历:

//层次遍历 void LevelorderTraversal( BinTree BT ){ BinTree s[100]; int front = 0,rear = 0; BinTree p; if(BT==NULL) return; s[rear++] = BT; while(front<rear){ p = s[front++]; printf(" %c",p->Data); if(p->Left) s[rear++] = p->Left; if(p->Right) s[rear++] = p->Right; } }

综合代码:

//中序 void InorderTraversal( BinTree BT ){ BinTree s[100]; int top = -1; BinTree p = BT; if(p==NULL) return; while(p!=NULL||top!=-1){ if(p!=NULL){ s[++top] = p; p = p->Left; }else{ p = s[top--]; printf(" %c",p->Data); p = p->Right; } } } //先序 void PreorderTraversal( BinTree BT ){ BinTree s[100]; int top = -1; BinTree p = BT; if(p==NULL) return; s[++top] = p; while(top!=-1){ p = s[top--]; printf(" %c",p->Data); if(p->Right) s[++top] = p -> Right; if(p->Left) s[++top] = p-> Left; } } //后序 void PostorderTraversal( BinTree BT ){ BinTree s[100]; int top = -1; BinTree p = BT; BinTree last = NULL; while(p!=NULL || top!=-1){ if(p!=NULL){ s[++top] = p; p = p->Left; }else{ p = s[top]; if(p->Right!=NULL &&p->Right!=last){ p = p->Right; }else{ p = s[top--]; printf(" %c",p->Data); last = p; p = NULL; } } } } //层次遍历 void LevelorderTraversal( BinTree BT ){ BinTree s[100]; int front = 0,rear = 0; BinTree p; if(BT==NULL) return; s[rear++] = BT; while(front<rear){ p = s[front++]; printf(" %c",p->Data); if(p->Left) s[rear++] = p->Left; if(p->Right) s[rear++] = p->Right; } }
http://www.jsqmd.com/news/492876/

相关文章:

  • 初中生文旅研学避坑指南|4家优质机构推荐,拒绝“游而不学”! - 品牌测评鉴赏家
  • 详解单链表(含链表的实现过程)
  • Halcon实战:PCB图像3D拼接全流程解析(附后处理优化技巧)
  • 大学想进ai行业的看过来
  • Win11下WSL2常见报错全攻略:从VMware网卡到localhost代理的完整解决方案
  • #第九届立创电赛# 基于ESP32C3低功耗采集与T113-Linux监控的智能环境监测系统设计
  • OFA-Image-Caption模型Java后端集成实战:提供企业级图像描述API
  • Java学习第十天
  • 免费降ai工具实测:哪个免费额度最良心 - 我要发一区
  • 高德地图JS API实战:5分钟搞定自定义点标记(含MarkerClusterer避坑指南)
  • 国外文旅研学机构哪家好?博主亲测4家靠谱之选,避坑不花冤枉钱 - 品牌测评鉴赏家
  • 宝藏亲子文旅研学机构合集,解锁玩学一体新体验 - 品牌测评鉴赏家
  • 解决银河麒麟无SRS安装包的痛点:自己动手丰衣足食,rpm打包指南
  • 《QGIS快速入门与应用基础》222:属性面板:元素属性设置
  • 免费降ai的正确姿势:避开这些坑少走弯路 - 我要发一区
  • AudioSeal Pixel Studio从零开始:中小企业低成本构建音频版权防护体系
  • 新能源汽车动力系统:经济性能与EDQ目标SSTS的深入分析与探讨
  • 计算机毕业设计源码:python二手房数据挖掘与可视化系统 Django框架 可视化 Requests爬虫 房屋 房子 房源 数据分析 (建议收藏)✅
  • 论文AI率太高不花钱能降吗?免费方案汇总 - 我要发一区
  • 提示工程架构师必备:Agentic AI情感智能提示工程的评估指标与方法
  • 结构体——结构体基本用法,结构体初始化
  • Wincc组态工业加热炉装置组态画面——探索自动化控制的精彩
  • 小学生文旅研学哪家强?4家优质机构盘点,避坑不踩雷 - 品牌测评鉴赏家
  • UEC++Part4--UObject、UgameInstance、actor组件、静态加载
  • 探索声子晶体线缺陷在压电能量收集中的奇妙世界
  • Kmeans算法、最佳聚类数的确定及散点图
  • 9元搞定!阿里云OSS+HTML搭建个人静态网站全流程(含域名备案避坑指南)
  • 咱们今天来盘一盘三相级联H桥的载波移相仿真。直接上硬菜,先看看A相三个H桥怎么玩载波错位。每个H桥的载波相位差120度,这招能把输出波形的纹波压得死死的
  • 信号与系统分析2026(春季)作业参考答案 - 第八次作业
  • 高压下的自我怀疑:当“我的实力配不上经历”成为内心独白,我们该如何理性应对与战略抉择?