二叉树的建立和三种遍历
二叉树的三种遍历是以根的遍历顺序来讲的
先序遍历(根左右)
中序遍历(左根右)
后序遍历(左右根)
二叉树是从根节点的那一层开始,从左至右读每一层的结点读入的。@表示空结点,#表示输入结束
#include <iostream>
#include <cstdio>
#include <cmath>
#include <string>
#include <cstring>
#include <algorithm>
#include <limits>
#include <vector>
#include <stack>
#include <queue>
#include <set>
#include <map>
#define INF 0x3f3f3f3f
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
const int maxN = 1e5 + 5;
const int maxM = 1;struct bitree{char data;bitree *lsn, *rsn;
} *tree[maxN];
bitree *Creat_Bitree()
{bitree *root, *tmp;root = NULL;int front = 1, rear = 0;char ch;ch = getchar();while(ch != '#'){tmp = NULL;if(ch != '@'){tmp = (bitree *)malloc(sizeof(bitree));tmp->data = ch;tmp->lsn = NULL;tmp->rsn = NULL;}tree[++ rear] = tmp;if(rear == 1) root = tmp;else{if(tmp && tree[front])//孩子不为空且父亲结点不为空{if(rear % 2 == 0)tree[front]->lsn = tmp;elsetree[front]->rsn = tmp;}if(rear % 2)//tree[front]的左右孩子处理完了front ++;}ch = getchar();}return root;
}
void preorder(bitree *p)
{if(p != NULL){printf("%c", p->data);preorder(p->lsn);preorder(p->rsn);}
}
void midorder(bitree *p)
{if(p != NULL){midorder(p->lsn);printf("%c", p->data);midorder(p->rsn);}
}
void lastorder(bitree *p)
{if(p != NULL){lastorder(p->lsn);lastorder(p->rsn);printf("%c", p->data);}
}
int main()
{bitree *rt;rt = Creat_Bitree();printf("Preorder is:\n");preorder(rt);printf("\nMidorder is:\n");midorder(rt);printf("\nLastorder is:\n");lastorder(rt);return 0;
}
/*
ABCD@EF@G@@@@H#
*/
二叉树的建立和三种遍历相关推荐
- 二叉树的建立与三种遍历
树是一种数据结构,为什么叫它"树",因为它倒过来就是一棵树 根在上,而叶在下 其概念主要有根.父.子.深.叶等, 如上图:A为这棵树的根 B为D的父,而D则为B的子 E.F.G互为 ...
- # 遍历结构体_关于二叉树怎样建立和四种遍历方法你知道吗?
1. 首先我们要知道二叉树的性质是什么2. 怎样建立二叉搜索树?3. 先序遍历4. 中序遍历5. 后序遍历6. 总结上述三种遍历规律7. 层序遍历 1. 首先我们要知道二叉树的性质是什么 在二叉树上, ...
- 二叉树的创建与三种遍历方式(带图文详解)
二叉树是由多节点组成的,每个节点最多链接两个节点,这两个节点就称为根节点的左树和右树. 每个节点的由数据区,左树,右树组成. typedef struct node {int data;struct ...
- 20-12-22 二叉树的构建、三种遍历、顺序二叉树原理
二叉树: public class BinaryTree {public static void main(String[] args) {HeroNode heroNode1 = new HeroN ...
- c语言中二叉树中总结点,C语言二叉树的三种遍历方式的实现及原理
二叉树遍历分为三种:前序.中序.后序,其中序遍历最为重要.为啥叫这个名字?是根据根节点的顺序命名的. 比如上图正常的一个满节点,A:根节点.B:左节点.C:右节点,前序顺序是ABC(根节点排最先,然后 ...
- 二叉树----数据结构:二叉树的三种遍历及习题
二叉树----数据结构:二叉树的三种遍历,利用递归算法. 关于二叉树的遍历,应用非常广泛,不单单是访问打印结点,还可以进行一系列的操作,如赋值.删除.查找.求二叉树的深度等等. 有递归和非递归两种算法 ...
- 二叉树的三种遍历方式(递归、非递归和Morris遍历)
二叉树的三种遍历方式(递归.非递归和Morris遍历) 原文:http://www.linuxidc.com/Linux/2015-08/122480.htm 二叉树遍历是二叉树的最基本的操作,其实现 ...
- c语言二叉树的遍历菜单系统,C语言二叉树的三种遍历方式的实现及原理
C语言二叉树的三种遍历方式的实现及原理 发布时间:2020-10-03 19:43:57 来源:脚本之家 阅读:63 作者:看雪. 二叉树遍历分为三种:前序.中序.后序,其中序遍历最为重要.为啥叫这个 ...
- 二叉树的前序中序后序三种遍历方式及递归算法介绍
二叉树三种遍历方式 二叉树的遍历是整个二叉树的核心,二叉树的几本操作都要依赖于遍历,对于二叉树的遍历,递归是最简单也最容易理解的,本文详细介绍了二叉树的三种遍历方法,并用递归来实现: 完整的可调试代码 ...
最新文章
- windows10 中 python3 离线 安装包,没有 网络 的 情况下 安装 whl包
- python 倒计时功能怎么用print实现_python 实现倒计时功能(gui界面)
- python语言的理解-初学Python语言者必须理解的下划线
- java线程学习之notify方法和notifyAll方法
- 用系统滚动条实现NumericUpDown的原理
- 如何利用扩展欧几里得算法求解不定方程_客户端不用的算法系列:从头条笔试题认识扩展欧几里得算法...
- java 嵌套类 作用_java 嵌套类的分类、为什么使用嵌套类?
- RocketMq重试及消息不丢失机制
- 如何对oracle数据库进行监控检查
- Mac 常用快捷键与操作
- C#之网络字节序与主机字节序互转
- fastText:极快的文本分类工具
- 人脸识别测试图片_人脸识别或将到达瓶颈,有监督的聚类算法探索新思路
- 我想问问4月7号什么日子
- 什么都会,也许只是盲目跟风,和优秀无关
- 鸿蒙os系统测评,鸿蒙OS 2首批评价出炉,看已升级用户都怎么说的
- matlab mysql建系统_能环水体治理项目(Mysql数据库,Matlab创建GUI界面)【一】
- 安装配置MacTex
- 今日头条(java后台开发)——实习生面试
- 孪生素数【函数实现】