二叉树的基本操作(建立与遍历)
【问题描述】
以二叉链表的形式创建二叉树(不超过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;
}
运行结果如下:
二叉树的基本操作(建立与遍历)相关推荐
- C语言二叉树实验报告流程图,二叉树的建立与遍历实验报告(c语言编写,附源代码).doc...
二叉树的建立与遍历实验报告(c语言编写,附源代码).doc 第 1 页,共 9 页二叉树的建立与遍历实验报告级 班 年 月 日 姓名 学号_ 1实验题目建立一棵二叉树,并对其进行遍历(先序.中序.后序 ...
- 二叉树的建立和遍历的各种问题
链表声明: //基本结构声明 #include<iostream> #include<queue> #include<stack> #include<cstd ...
- 二叉树的建立和遍历算法 - 数据结构和算法47
二叉树的建立和遍历算法 让编程改变世界 Change the world by program 有童鞋会说,我们上节课研究这么多遍历的方法干啥呢?聪明的鱼油们怎么看?! 对于二叉树,思路方面我们已 ...
- 小朋友学数据结构(3):二叉树的建立和遍历
小朋友学数据结构(3):二叉树的建立和遍历 一.基本概念 BinaryTree.png 二叉树:每个结点的子结点个数不大于2的树,叫做二叉树. 根结点:最顶部的那个结点叫做根结点,根结点是所有子结点的 ...
- 二叉树的建立与遍历(数据结构)
之前上数据结构时,只是上课听听,没咋在课下实现,现在大二都快结束了,经过几波的ACM竞赛,感觉数据结构太重要了,带着兴趣和欲望重新学一下数据结构中的基础操作 我用的是先序次序输入二叉树中节点建立的二叉 ...
- 二叉树的遍历实验报告C语言,二叉树的建立与遍历实验报告(c语言编写,附源代码)...
程序用VC编写,实现建立一棵二叉树的功能,并对其进行遍历(先序.中序.后序),并且打印输出遍历结果. 二叉树的建立与遍历实验报告 级 班 年 月 日 姓名 学号_ 1.实验题目 建立一棵二叉树,并对其 ...
- 数据结构——二叉树的建立与遍历算法(实验报告)
实验名称:二叉树的建立与遍历算法 指导教师: 实验日期:2022年月日 实验地点: 成绩: 实验目的: 1.掌握二叉树的定义. 2.二叉树的链式存储结构及在链式存储结构中三种遍历(前 ...
- PTA - 建立与遍历二叉树
建立与遍历二叉树 题目:以字符串的形式定义一棵二叉树的先序序列,若字符是'#', 表示该二叉树是空树,否则该字符是相应结点的数据元素.读入相应先序序列,建立二叉链式存储结构的二叉树,然后中序遍历该二叉 ...
- 中序建立二叉树,非递归前序遍历二叉树
内容: 编写程序,实现下述功能,并上机调试通过. 按中序顺序建立一棵二叉树: 用非递归方式遍历二叉树(先序),输出遍历序列. 步骤: 算法分析 采用二叉链表做存储结构,建立二叉树,借助于栈结构来实现二 ...
最新文章
- 如何有效使用Project(1)——编制进度计划、保存基准
- 【直播回放】60分钟讲解深度学习中的数据爬虫和标注
- 【渝粤教育】电大中专电商运营实操 (1)作业 题库
- react jquery_2019年React简介(面向仅了解jQuery的人们)
- 网络编程套接字Socket
- mysql lost connection to server during query
- c语言数组的一维编程,C语言编程一维数组的使用.doc
- 如何在Ubuntu系统中使用github
- 如何将iTunes资料安全地备份到外部硬盘驱动器?
- 计算机软考里面的英语试题,2011全国计算机软考网管英语试题及答案(4)
- 分享一个响应式电商网站前端模板
- linux内核各版本的下载路径
- android小米手机变慢,手机越来越慢怎么破?小米手机七大加速绝招
- 我去补了个牙,然后发现,未知的恐惧让人很绝望
- Sublime txt文本编辑器快捷方式简介
- C#如何遍历文件夹下的所有文件
- 小程序中打开pdf文件(wx.downloadFile+wx.openDocument)
- 大学生IT博客大赛最技术50强与最生活10强文章
- 淘宝 Android 端图片体验优化实践
- AD18学习之画PCB时,如何移动器件同时导线跟随
热门文章
- Layer弹出层关闭后刷新父页面
- 小汤学编程之JAVA基础day11——集合框架:List/Set/Map集合、Collections集合工具类、泛型、TreeMap和TreeSet
- python学习笔记之random模块
- BZOJ5243 : [Lydsy2017省队十连测]绝版题
- 解决mac管理员变成普通成员
- K-means算法应用:图片压缩
- 数据结构(六) 排序
- VirtualBox中使用双网卡实现CentOS既能上网(校园网)也能使用SSHclient
- node.js fs.open 和 fs.write 读取文件和改写文件
- 开源通用爬虫框架YayCrawler-页面的抽取规则定义