二叉树的查找(前序、中序、后序、层序遍历)--biaobiao88
建立一棵含有n个结点的二叉树,采用二叉链表存储;
输出前序、中序、后序、、层序遍历该二叉树的遍历结果。
定义二叉树的数据类型——二叉树结点结构体BiNode。建立二叉链表可以采用扩展二叉树的一个遍历序列,例如前序序列,将扩展二叉树的前序序列由键盘输入,建立该二叉树的二叉链表存储。
简单起见,本实验假定二叉树的数据元素为char型
用模板类改写
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<malloc.h>
int MaxSize = ;
using namespace std;
typedef char DataType;
typedef struct BiNode
{
DataType data;
struct BiNode *lchile,*rchild;
}BiNode;
BiNode *root; //创建拓展二叉树,#代虚结点
BiNode *Creat(BiNode *root)// cishu /////
{
char ch;
cin >> ch;
if(ch == '#')
root = NULL;
else
{
root = (BiNode *)malloc(sizeof(BiNode));
root->data = ch;
root->lchile = Creat(root->lchile);
root->rchild = Creat(root->rchild);
}
return root;
} //前序遍历
void PreOrder(BiNode *root)
{
if(root == NULL)
return;
else
{
cout << root->data << " ";
PreOrder(root->lchile);
PreOrder(root->rchild);
}
} //中序遍历
void InOrder(BiNode *root)
{
if(root == NULL)
return;
else
{
InOrder(root->lchile);
cout << root->data << " ";
InOrder(root->rchild);
}
} //后序遍历
void PostOrder(BiNode *root)
{
if(root == NULL)
return;
else
{
InOrder(root->lchile);
InOrder(root->rchild);
cout << root->data << " ";
}
} //层序遍历
void LevelOrder(BiNode *root)
{
BiNode *q = NULL,*Q[MaxSize];
int front = -;
int rear = -;
if(root == NULL)
return;
Q[++rear] = root;
while(front != rear)
{
q = Q[++front];
cout << q->data << " ";
if(q->lchile != NULL)
Q[++rear] = q->lchile;
if(q->rchild != NULL)
Q[++rear] = q->rchild;
} } int main()
{
BiNode *root = NULL;
root = Creat(root);
cout << "该二叉树的根节点是:" << root->data << endl;
cout << endl;
cout << "该二叉树的前序遍历是:";
PreOrder(root);
cout << endl;
// cout << "该二叉树的根节点是:" << root->data << endl;
cout << endl;
cout << "该二叉树的中序遍历是:";
InOrder(root);
cout << endl;
// cout << "该二叉树的根节点是:" << root->data << endl;
cout << endl;
cout << "该二叉树的后序遍历是:";
PostOrder(root);
cout << endl;
// cout << "该二叉树的根节点是:" << root->data << endl;
cout << endl;
cout << "该二叉树的层序遍历是:";
LevelOrder(root);
cout << endl;
return ;
} /*
abd##e##c#f##
该二叉树的根节点是:a 该二叉树的前序遍历是:a b d e c f 该二叉树的中序遍历是:d b e a c f 该二叉树的后序遍历是:d b e c f a 该二叉树的层序遍历是:a b c d e f
*/

二叉树的查找(前序、中序、后序、层序遍历)--biaobiao88的更多相关文章
- LeetCode:二叉树的前、中、后序遍历
描述: ------------------------------------------------------- 前序遍历: Given a binary tree, return the pr ...
- leetcode(144,94,145,102)中迭代版的二叉树的前、中、后、层级遍历
//前序遍历class Solution{ public: vector<int> preorderTraversal(TreeNode *root){ vector<int> ...
- 算法进阶面试题03——构造数组的MaxTree、最大子矩阵的大小、2017京东环形烽火台问题、介绍Morris遍历并实现前序/中序/后序
接着第二课的内容和带点第三课的内容. (回顾)准备一个栈,从大到小排列,具体参考上一课.... 构造数组的MaxTree [题目] 定义二叉树如下: public class Node{ public ...
- 二叉树 遍历 先序 中序 后序 深度 广度 MD
Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...
- 前序+中序->后序 中序+后序->前序
前序+中序->后序 #include <bits/stdc++.h> using namespace std; struct node { char elem; node* l; n ...
- SDUT OJ 数据结构实验之二叉树八:(中序后序)求二叉树的深度
数据结构实验之二叉树八:(中序后序)求二叉树的深度 Time Limit: 1000 ms Memory Limit: 65536 KiB Submit Statistic Discuss Probl ...
- SDUT-2804_数据结构实验之二叉树八:(中序后序)求二叉树的深度
数据结构实验之二叉树八:(中序后序)求二叉树的深度 Time Limit: 1000 ms Memory Limit: 65536 KiB Problem Description 已知一颗二叉树的中序 ...
- 给出 中序&后序 序列 建树;给出 先序&中序 序列 建树
已知 中序&后序 建立二叉树: SDUT 1489 Description 已知一棵二叉树的中序遍历和后序遍历,求二叉树的先序遍历 Input 输入数据有多组,第一行是一个整数t (t& ...
- 【C&数据结构】---关于链表结构的前序插入和后序插入
刷LeetCode题目,需要用到链表的知识,忽然发现自己对于链表的插入已经忘得差不多了,以前总觉得理解了记住了,但是发现真的好记性不如烂笔头,每一次得学习没有总结输出,基本等于没有学习.连复盘得机会都 ...
随机推荐
- 【linux】【docker】docker私服安装
前言 系统环境:Centos7.jdk1.8 docker私服:可以把项目通过dockerfile文件build成docker镜像,供其他环境拉取.部署在本地,私有化. 安装 dockerHUB私服 ...
- tomcat 报错出现 jar not loaded. See Servlet Spec 2.3, section 9.7.2. Offending class: javax/servlet/Servlet.class
这是你导入的jar的问题 一般情况下是导入的包tomcat已经存在 也就是说 不需要你再次导入 所以你现在要做的是删除你所导的包 解决方案:删除你的web项目导入的这两个jar文件 jsp-api.j ...
- 基于Docker搭建大数据集群(四)Spark部署
主要内容 spark部署 前提 zookeeper正常使用 JAVA_HOME环境变量 HADOOP_HOME环境变量 安装包 微云下载 | tar包目录下 Spark2.4.4 一.环境准备 上传到 ...
- thymeleaf 将后端绑定数据直接传递js变量
根据自我需求,thymeleaf可以直接将后端数据传递给js中进行使用,例如: 1.后端接口数据: @Controllerpublic class TestController { @RequestM ...
- Quartz系列(一):基础介绍
新建一个.NET Core控制台项目,NuGet引用Quartz引用. class Program { static void Main(string[] args) { var task = Tas ...
- centos7.x 将普通用户加入sudoers中,获取sudo执行权限
centos7.x 将普通用户加入sudoers中,获取sudo执行权限 0 问题由来 你在提起兴致学习的时候,兴冲冲地往黑洞洞的文本窗口输入下一行: [pan@localhost ~]$ sud ...
- 【JavaScript】 直接下载保存文件
//直接下载保存文件 function Download(filePath) { // 如果中间IFRAME不存在,则添加 if (!document.getElementById("_SA ...
- Pycharm 快捷键大全 2019.2.3
在Pycharm中打开Help->Keymap Reference可查看默认快捷键帮助文档,文档为PDF格式,位于安装路径的help文件夹中,包含MAC操作系统适用的帮助文档. 下图为2019. ...
- Redis单线程架构以及工作方式
一.单线程模型 Redis客户端对服务端的每次调用都经历了发送命令,执行命令,返回结果三个过程.其中执行命令阶段,由于Redis是单线程来处理命令的,所有每一条到达服务端的每一条到达服务端的命令都不会 ...
- Vijos 1067守望者的烦恼
背景 守望者-warden,长期在暗夜精灵的的首都艾萨琳内担任视察监狱的任务,监狱是成长条行的,守望者warden拥有一个技能名叫“闪烁”,这个技能可以把她传送到后面的监狱内查看,她比较懒,一般不查看 ...