【问题描述】

以二叉链表的形式创建二叉树(不超过20个结点),并编写二叉树的遍历算法,实现二叉树的先序、中序及后序三种遍历。

【输入形式】

输入二叉树的结点信息(以先序遍历方式建立二叉树)。

【输出形式】

输出二叉树的先序、中序及后序三种遍历序列。

【样例输入1】

A

B

C

#

#

#

#

【样例输出1】

preorder:ABC

inorder:CBA

postorder:CBA

【样例输入2】

A

B

#

#

C

#

#

【样例输出2】

preorder:ABC

inorder:BAC

postorder:BCA

在二叉树的建立之前需要了解二叉树的遍历。

建立二叉树:

以二叉链表作为存储结构,按先序遍历序列建立二叉树。

按照先序遍历的递归过程生成结点,建立二叉树的二叉链表,因此生成二叉树的算法也是递归的。按照A B C # # D E # G # # F # # # 的顺序依次读入字符可以建立该二叉树的二叉链表。创建过程中,遇到 # 表示空树。递归生成如下:

(1)读入 A 创建 A 结点;

(2)先序遍历创建 A 的左子树,读入 B 创建结点 B ,B 为 A 的左孩子;

(3)先序遍历创建 B 的左子树,读入 C 创建结点 C ,C 为 B 的左孩子;

(4)先序遍历创建 C 的左子树,读入 # ,C 的左子树为空。

(5)先序遍历创建C 的右子树,读入 #,C 的右子树为空;B 的左子树创建完毕;

(6)先序遍历创建 B 的右子树,读入 D ,创建结点 D ,D 为 B 的右孩子;

依次建立 D 的左右子树,直至全部数据读完,二叉链表创建结束。

算法如下:

void  createBiTree(BiTree  *t)
{
//此处补充代码,完成以先序遍历方式建立二叉树char s;BiTree q;s=getchar();getchar();if(s=='#'){* t=NULL;return;}q=(BiTree)malloc(sizeof(struct BTNode));   //创建根结点if(q==NULL){exit(0);}q->data=s;*t=q;createBiTree(&q->lchild);     //递归建立左子树createBiTree(&q->rchild);     //递归建立右子树
}

完整代码的实现:

#include  <stdio.h>
#include  <stdlib.h>
#include<malloc.h>
#define  MAX  20
//二叉链表结点定义
typedef  struct  BTNode
{char  data  ;struct  BTNode  *lchild;struct  BTNode  *rchild  ;
}*BiTree;void  createBiTree(BiTree  *t)
{
//此处补充代码,完成以先序遍历方式建立二叉树char s;BiTree q;s=getchar();getchar();if(s=='#'){* t=NULL;return;}q=(BiTree)malloc(sizeof(struct BTNode));if(q==NULL){exit(0);}q->data=s;*t=q;createBiTree(&q->lchild);createBiTree(&q->rchild);
}void  PreOrder(BiTree  p)
{
//此处补充代码,完成二叉树的先序遍历if(p!=NULL){printf("%c",p->data);PreOrder(p->lchild);PreOrder(p->rchild);}
}void  InOrder(BiTree  p)
{
//此处补充代码,完成二叉树的中序遍历if(p!=NULL){InOrder(p->lchild);printf("%c",p->data);InOrder(p->rchild);}
}void  PostOrder(BiTree  p)
{//此处补充代码,完成二叉树的后序遍历if(p!=NULL){PostOrder(p->lchild);PostOrder(p->rchild);printf("%c",p->data);}
}
int main()
{
//此处补充代码,调用二叉树的三种遍历函数完成遍历并按要求输出对应遍历序列BiTree t=NULL;createBiTree(&t);printf("\npreorder:");PreOrder(t);printf("\ninorder:");InOrder(t);printf("\npostorder:");PostOrder(t);printf("\n");return 0;
}

运行结果如下:

二叉树的基本操作(建立与遍历)相关推荐

  1. C语言二叉树实验报告流程图,二叉树的建立与遍历实验报告(c语言编写,附源代码).doc...

    二叉树的建立与遍历实验报告(c语言编写,附源代码).doc 第 1 页,共 9 页二叉树的建立与遍历实验报告级 班 年 月 日 姓名 学号_ 1实验题目建立一棵二叉树,并对其进行遍历(先序.中序.后序 ...

  2. 二叉树的建立和遍历的各种问题

    链表声明: //基本结构声明 #include<iostream> #include<queue> #include<stack> #include<cstd ...

  3. 二叉树的建立和遍历算法 - 数据结构和算法47

    二叉树的建立和遍历算法 让编程改变世界 Change the world by program   有童鞋会说,我们上节课研究这么多遍历的方法干啥呢?聪明的鱼油们怎么看?! 对于二叉树,思路方面我们已 ...

  4. 小朋友学数据结构(3):二叉树的建立和遍历

    小朋友学数据结构(3):二叉树的建立和遍历 一.基本概念 BinaryTree.png 二叉树:每个结点的子结点个数不大于2的树,叫做二叉树. 根结点:最顶部的那个结点叫做根结点,根结点是所有子结点的 ...

  5. 二叉树的建立与遍历(数据结构)

    之前上数据结构时,只是上课听听,没咋在课下实现,现在大二都快结束了,经过几波的ACM竞赛,感觉数据结构太重要了,带着兴趣和欲望重新学一下数据结构中的基础操作 我用的是先序次序输入二叉树中节点建立的二叉 ...

  6. 二叉树的遍历实验报告C语言,二叉树的建立与遍历实验报告(c语言编写,附源代码)...

    程序用VC编写,实现建立一棵二叉树的功能,并对其进行遍历(先序.中序.后序),并且打印输出遍历结果. 二叉树的建立与遍历实验报告 级 班 年 月 日 姓名 学号_ 1.实验题目 建立一棵二叉树,并对其 ...

  7. 数据结构——二叉树的建立与遍历算法(实验报告)

    实验名称:二叉树的建立与遍历算法          指导教师: 实验日期:2022年月日 实验地点: 成绩: 实验目的: 1.掌握二叉树的定义. 2.二叉树的链式存储结构及在链式存储结构中三种遍历(前 ...

  8. PTA - 建立与遍历二叉树

    建立与遍历二叉树 题目:以字符串的形式定义一棵二叉树的先序序列,若字符是'#', 表示该二叉树是空树,否则该字符是相应结点的数据元素.读入相应先序序列,建立二叉链式存储结构的二叉树,然后中序遍历该二叉 ...

  9. 中序建立二叉树,非递归前序遍历二叉树

    内容: 编写程序,实现下述功能,并上机调试通过. 按中序顺序建立一棵二叉树: 用非递归方式遍历二叉树(先序),输出遍历序列. 步骤: 算法分析 采用二叉链表做存储结构,建立二叉树,借助于栈结构来实现二 ...

最新文章

  1. 如何有效使用Project(1)——编制进度计划、保存基准
  2. 【直播回放】60分钟讲解深度学习中的数据爬虫和标注
  3. 【渝粤教育】电大中专电商运营实操 (1)作业 题库
  4. react jquery_2019年React简介(面向仅了解jQuery的人们)
  5. 网络编程套接字Socket
  6. mysql lost connection to server during query
  7. c语言数组的一维编程,C语言编程一维数组的使用.doc
  8. 如何在Ubuntu系统中使用github
  9. 如何将iTunes资料安全地备份到外部硬盘驱动器?
  10. 计算机软考里面的英语试题,2011全国计算机软考网管英语试题及答案(4)
  11. 分享一个响应式电商网站前端模板
  12. linux内核各版本的下载路径
  13. android小米手机变慢,手机越来越慢怎么破?小米手机七大加速绝招
  14. 我去补了个牙,然后发现,未知的恐惧让人很绝望
  15. Sublime txt文本编辑器快捷方式简介
  16. C#如何遍历文件夹下的所有文件
  17. 小程序中打开pdf文件(wx.downloadFile+wx.openDocument)
  18. 大学生IT博客大赛最技术50强与最生活10强文章
  19. 淘宝 Android 端图片体验优化实践
  20. AD18学习之画PCB时,如何移动器件同时导线跟随

热门文章

  1. Layer弹出层关闭后刷新父页面
  2. 小汤学编程之JAVA基础day11——集合框架:List/Set/Map集合、Collections集合工具类、泛型、TreeMap和TreeSet
  3. python学习笔记之random模块
  4. BZOJ5243 : [Lydsy2017省队十连测]绝版题
  5. 解决mac管理员变成普通成员
  6. K-means算法应用:图片压缩
  7. 数据结构(六) 排序
  8. VirtualBox中使用双网卡实现CentOS既能上网(校园网)也能使用SSHclient
  9. node.js fs.open 和 fs.write 读取文件和改写文件
  10. 开源通用爬虫框架YayCrawler-页面的抽取规则定义