二叉树的查找(前序、中序、后序、层序遍历)--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题目,需要用到链表的知识,忽然发现自己对于链表的插入已经忘得差不多了,以前总觉得理解了记住了,但是发现真的好记性不如烂笔头,每一次得学习没有总结输出,基本等于没有学习.连复盘得机会都 ...
随机推荐
- 校园网打开IEEE 显示未登录
校园网访问IEEE 显示未登录,如图 解决办法 1.打开网络和共享中心 2.如图 3.把ipv6的钩去掉 4.把host文件(在C:\Windows\System32\drivers\etc)复制到桌 ...
- Java HotSpot(TM) 64-Bit Server VM warning: INFO: os::commit_memory(0x00000000fa980000, 59244544, 0) failed; error='Cannot allocate memory' (errno=12)
启动项目报错 Java HotSpot(TM) 64-Bit Server VM warning: INFO: os::commit_memory(0x00000000fa980000, 592445 ...
- Centos 7 配置tomcat服务器
1.首先查看当前系统版本 uname -a 2.安装之前查看系统是否安装了java rpm -qa |grep java rpm -qa |grep jdk rpm -qa |grep gcj 如果没 ...
- JAVA线程通信之生产者与消费者
package cn.test.hf.test3; import java.util.concurrent.locks.Condition;import java.util.concurrent.lo ...
- ORM组件LogORM使用指北
LogORM是一个对数据库进行对象关系映射的ORM组件.当对数据库进行增删改操作时,组件会自动进行日志记录. 该组件支持.Net平台和.NetCore平台,支持SQL Server.Oracle.My ...
- Python简单的登录注册代码
#-*- coding: utf-8 -*- import hashlib # 定义数据库(声明字典) #注册登录的简单hash处理 db={} def get_md5(password): md5= ...
- Spark 学习笔记之 distinct/groupByKey/reduceByKey
distinct/groupByKey/reduceByKey: distinct: import org.apache.spark.SparkContext import org.apache.sp ...
- Spring Boot (十二): Spring Boot 邮件服务
最早我们发邮件的时候是使用 JavaMail 来发送邮件,而在 Spring Boot 中, Spring Boot 帮我们将 JavaMail 封装好了,是可以直接拿来使用的. 1. 依赖文件 po ...
- Linux 命令个人笔记
[表示命令]man -f [] 显示一个命令的功能whatis [] 显示一个命令的功能ls -lR | grep '^-' | wc -l 统计一个目录下总共有多少个文件head [-n numbe ...
- 超链接target属性的取值和作用?
<a>标签的target属性规定在何处打开连接文档 属性值 _black:点击一次打开一个新窗口 _new:始终在同一个新窗口中打开 _self:默认,在当前窗口打开 _parent:在父 ...