二叉树的前序、中序和后序遍历
目录
文章目录
- 目录
- 前言
- 一、二叉树遍历是什么?
- 二、二叉树遍历的种类
- 1.前序遍历
- 2.中序遍历
- 3.后序遍历
- 总结
前言
例如:跟着其他的大神学习了二叉树的遍历,下面简单介绍一下二叉树遍历的知识。
(我是一个纯小白)
一、二叉树遍历是什么?
所谓遍历,就是将一个数据结构中的数据按照一定的顺序都过一遍。而二叉树的遍历,就是按照一定规律依次遍历二叉树中的根节点、左子树、右子树。
二、二叉树遍历的种类
若规定遍历先左后右,那么二叉树的遍历种类可分为前序遍历、中序遍历、后序遍历。前序遍历的遍历方式为访问根节点,访问左子树,访问右子树(顺序即为根左右)。中序遍历的遍历方式为访问左子树,访问根节点,访问右子树(顺序为左根右)。后序遍历的遍历方式为访问左子树,访问右子树,访问根节点(顺序为左右根)。根在哪就如何遍历,根在前为前序,在中为中序,在后为后序。
以下遍历的实现是基于递归算法。
1.前序遍历
代码如下(示例):
void Preordertraverse(Binode *T){//通过递归来实现遍历if(T){//如果根节点不为空cout<<T->data<<" ";//输出根节点的数据Preordertraverse(T->Lchild);//以左子树为根节点递归Preordertraverse(T->rchild);//以右子树为根节点递归} }
2.中序遍历
代码如下(示例):
//2、中序遍历 void Inordertraverse(Binode *T) {if(T)//判断根节点是否为空{Inordertraverse(T->Lchild);//以左子树为根节点递归cout<<T->data<<" ";//输出根节点的数据Inordertraverse(T->rchild);//以右子树为根节点递归} }
3、后序遍历
代码如下(示例):
void Postordertraverse(Binode *T)
{
if(T)//判空
{
Inordertraverse(T->Lchild);//以左子树为根节点递归
Inordertraverse(T->rchild);//以右子树为根节点递归
cout<<T->data<<" ";//输出根节点的数据
}
}
遍历如下二叉树(可以说是最简单的二叉树了,嘿嘿)
完整调试代码如下:
#include <iostream>
#include<stdlib.h>
using namespace std;
//二叉链表的结构定义
typedef struct Binode{char data;//定义数据存放点
struct Binode *Lchild,*rchild;//分别定义左子树和右子树
}Binode,*Bitree;//定义数据结构别名
//1.先序遍历
void Preordertraverse(Binode *T){if(T){cout<<T->data<<" ";Preordertraverse(T->Lchild);Preordertraverse(T->rchild);}
}
//2、中序遍历
void Inordertraverse(Binode *T)
{if(T){Inordertraverse(T->Lchild);cout<<T->data<<" ";Inordertraverse(T->rchild);}
}
//3.后序遍历
void Postordertraverse(Binode *T)
{if(T){Inordertraverse(T->Lchild);Inordertraverse(T->rchild);cout<<T->data<<" ";}
}
int main()
{Binode *T;//二叉树的初始化T=(Binode *)malloc(sizeof(Binode));//利用malloc函数为二叉树根节点分配空间T->data='a';//二叉树根节点赋值T->Lchild=(Binode *)malloc(sizeof(Binode));//利用malloc函数为二叉树左子树分配空间T->Lchild->data='b';//二叉树左子树赋值T->Lchild->Lchild=NULL;//左子树无孩子T->Lchild->rchild=NULL;T->rchild=(Binode *)malloc(sizeof(Binode));//利用malloc函数为二叉树右子树分配空间T->rchild->data='c';//为二叉树右子树赋值T->rchild->Lchild=NULL;//右子树无孩子T->rchild->rchild=NULL;//前序遍历cout<<"前序遍历结果如下:"<<endl;Preordertraverse(T);//调用前序遍历函数cout<<endl;//换行//中序遍历cout<<"中序遍历结果如下:"<<endl;Inordertraverse(T);//调用中序遍历函数cout<<endl;//后序遍历cout<<"后序遍历结果如下:"<<endl;Postordertraverse(T);//调用后序遍历函数cout<<endl;return 0;
}
总结
代码很简单吧,哈哈哈。适合初学者看,我也是小白,能力有限,写不出太复杂的代码。
二叉树其实重在理解,理解之后就好学多了。
二叉树的前序、中序和后序遍历相关推荐
- 二叉树深度优先 java_二叉树遍历(前序、中序、后序、层次、深度优先、广度优先遍历) java实现...
二叉树是一种非常重要的数据结构,非常多其他数据结构都是基于二叉树的基础演变而来的.对于二叉树,有深度遍历和广度遍历,深度遍历有前序.中序以及后序三种遍历方法,广度遍历即我们寻常所说的层次遍历.由于树的 ...
- 手动创建一棵二叉树,然后利用前序、中序、后序、层序进行遍历(从创建二叉树到各种方式遍历)(含运行结果)
手动创建一棵二叉树,然后利用前序.中序.后序.层序进行遍历 import java.util.LinkedList; import java.util.List; import java.util.Q ...
- 【LeetCode系列】从中序与后序遍历序列构造二叉树 从前序与中序遍历序列构造二叉树...
关注上方"深度学习技术前沿",选择"星标公众号", 资源干货,第一时间送达! 105. 从前序与中序遍历序列构造二叉树 根据一棵树的前序遍历与中序遍历构造二叉树 ...
- 105从前序与中序遍历序列构造二叉树 106 从中序与后序遍历序列构造二叉树 (递归 + 哈希)
引言 这两道题主要是考察二叉树遍历的掌握,即由前序和中序推出原二叉树,由后序和中序推出原二叉树,这里先来说一下推导过程: 前序和中序 知道前序遍历和中序遍历,如何推原二叉树?(直接是结论,可以自行推导 ...
- 二叉树前序、中序、后序遍历求法
二叉树前序.中序.后序遍历相互求法 二叉树的三种遍历方法: 前序遍历: 1.访问根节点 2.前序遍历左子树 3.前序遍历右子树 中序遍历: 1.中序遍历左子树 2.访问根节点 3.中序遍历右子树 后序 ...
- PHP实现二叉树的深度优先遍历(前序、中序、后序)和广度优先遍历(层次) 转载陈小龙哈2017...
http://blog.csdn.net/baidu_30000217/article/details/52953127 前言: 深度优先遍历:对每一个可能的分支路径深入到不能再深入为止,而且每个结点 ...
- 二叉树前序遍历python输出_Python 二叉树查找 前序 中序 后序遍历
# -*- coding: utf-8 -*- # author: zhonghua # filename: search_binarytree.py # create: 2016/3/29 # ve ...
- 二叉树的前序、中序、后序遍历与创建
#include <iostream> #include <string> #include <stack> using namespace std; struct ...
- leetcode 106. 从中序与后序遍历序列构造二叉树 105. 从前序与中序遍历序列构造二叉树思考分析
目录 1.106题目 2.参考思路:递归切割数组 3.105题目 4.同样思路的代码 1.106题目 2.参考思路:递归切割数组 代码参考:公众号:代码随想录 后序数组+中序数组 以 后序数组(左右中 ...
- java二叉树合并_Java(树的前中后序遍历构造二叉树题型整合)前序和中序、中序和后序、前序和后序遍历序列构造二叉树算法整合归纳...
前言 二叉树各种花里胡哨的算法题真的把我搞晕了,今天特地整理出一类有关二叉树的算法题,希望能帮助阅读到此文章的人,今后不再受此类题型的困扰. 一.题目类型 已知二叉树的两种遍历序列,请根据该序列构建二 ...
最新文章
- 霍夫变换检测圆c 语言,c – 使用Hough变换检测圆
- html电池百分比,显示电池百分比在哪设置
- Content Security Policy的学习理解
- Linux原始套接字学习总结
- LiveVideoStack线上分享第五季(十一):Open WebRTC Toolkit实时视频分析系统
- php maximum,解决PHP程序运行时:Fatal error: Maximum execution time of 30 seconds exceeded in的错误提示...
- kubelet启动失败_kubelet 架构浅析
- 【干货分享】流程DEMO-事务呈批表
- docker安装nacos步骤
- mysql5.5和5.6版本间的坑
- 什么是 Linux 中的显示管理器?
- C++容器(一)——vector
- ssm提交post_SSM中get和post乱码笔记
- Linux内核的Kmemleak实现内存泄露检测
- Spark-SQL常用内置日期时间函数
- 论文详读《基于改进 LeNet-5 模型的手写体中文识别》
- mysql数据库命令备份还原
- Mysql基础篇(4)—— 创建和管理表
- 88-Spring Boot详解
- diskpart命令使用详解
热门文章
- java个人小管家代码_java毕业设计_springboot框架的家庭小管家系统
- 音乐web网站搭建思路
- 新手上路系列 Web服务器搭建篇——IIS的搭建
- 关于_REENTRANT宏
- 我和卢俊卿的兼职打工经历
- 苹果无敌了!颠覆了手机行业又要来颠覆安全套行业
- livemail如何对QQ,163,GAMIL等邮箱进行设置
- h5页面的雷达图 五边形_程序丨以五边形为例,使用UGUI绘制多边形雷达图
- python编程:从入门到实践7-8,7-9,7-10
- PyTorch中linspace的详细用法