目录

文章目录

  • 目录
  • 前言
  • 一、二叉树遍历是什么?
  • 二、二叉树遍历的种类
    • 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;
}

总结

代码很简单吧,哈哈哈。适合初学者看,我也是小白,能力有限,写不出太复杂的代码。

二叉树其实重在理解,理解之后就好学多了。

二叉树的前序、中序和后序遍历相关推荐

  1. 二叉树深度优先 java_二叉树遍历(前序、中序、后序、层次、深度优先、广度优先遍历) java实现...

    二叉树是一种非常重要的数据结构,非常多其他数据结构都是基于二叉树的基础演变而来的.对于二叉树,有深度遍历和广度遍历,深度遍历有前序.中序以及后序三种遍历方法,广度遍历即我们寻常所说的层次遍历.由于树的 ...

  2. 手动创建一棵二叉树,然后利用前序、中序、后序、层序进行遍历(从创建二叉树到各种方式遍历)(含运行结果)

    手动创建一棵二叉树,然后利用前序.中序.后序.层序进行遍历 import java.util.LinkedList; import java.util.List; import java.util.Q ...

  3. 【LeetCode系列】从中序与后序遍历序列构造二叉树 从前序与中序遍历序列构造二叉树...

    关注上方"深度学习技术前沿",选择"星标公众号", 资源干货,第一时间送达! 105. 从前序与中序遍历序列构造二叉树 根据一棵树的前序遍历与中序遍历构造二叉树 ...

  4. 105从前序与中序遍历序列构造二叉树 106 从中序与后序遍历序列构造二叉树 (递归 + 哈希)

    引言 这两道题主要是考察二叉树遍历的掌握,即由前序和中序推出原二叉树,由后序和中序推出原二叉树,这里先来说一下推导过程: 前序和中序 知道前序遍历和中序遍历,如何推原二叉树?(直接是结论,可以自行推导 ...

  5. 二叉树前序、中序、后序遍历求法

    二叉树前序.中序.后序遍历相互求法 二叉树的三种遍历方法: 前序遍历: 1.访问根节点 2.前序遍历左子树 3.前序遍历右子树 中序遍历: 1.中序遍历左子树 2.访问根节点 3.中序遍历右子树 后序 ...

  6. PHP实现二叉树的深度优先遍历(前序、中序、后序)和广度优先遍历(层次) 转载陈小龙哈2017...

    http://blog.csdn.net/baidu_30000217/article/details/52953127 前言: 深度优先遍历:对每一个可能的分支路径深入到不能再深入为止,而且每个结点 ...

  7. 二叉树前序遍历python输出_Python 二叉树查找 前序 中序 后序遍历

    # -*- coding: utf-8 -*- # author: zhonghua # filename: search_binarytree.py # create: 2016/3/29 # ve ...

  8. 二叉树的前序、中序、后序遍历与创建

    #include <iostream> #include <string> #include <stack> using namespace std; struct ...

  9. leetcode 106. 从中序与后序遍历序列构造二叉树 105. 从前序与中序遍历序列构造二叉树思考分析

    目录 1.106题目 2.参考思路:递归切割数组 3.105题目 4.同样思路的代码 1.106题目 2.参考思路:递归切割数组 代码参考:公众号:代码随想录 后序数组+中序数组 以 后序数组(左右中 ...

  10. java二叉树合并_Java(树的前中后序遍历构造二叉树题型整合)前序和中序、中序和后序、前序和后序遍历序列构造二叉树算法整合归纳...

    前言 二叉树各种花里胡哨的算法题真的把我搞晕了,今天特地整理出一类有关二叉树的算法题,希望能帮助阅读到此文章的人,今后不再受此类题型的困扰. 一.题目类型 已知二叉树的两种遍历序列,请根据该序列构建二 ...

最新文章

  1. 霍夫变换检测圆c 语言,c – 使用Hough变换检测圆
  2. html电池百分比,显示电池百分比在哪设置
  3. Content Security Policy的学习理解
  4. Linux原始套接字学习总结
  5. LiveVideoStack线上分享第五季(十一):Open WebRTC Toolkit实时视频分析系统
  6. php maximum,解决PHP程序运行时:Fatal error: Maximum execution time of 30 seconds exceeded in的错误提示...
  7. kubelet启动失败_kubelet 架构浅析
  8. 【干货分享】流程DEMO-事务呈批表
  9. docker安装nacos步骤
  10. mysql5.5和5.6版本间的坑
  11. 什么是 Linux 中的显示管理器?
  12. C++容器(一)——vector
  13. ssm提交post_SSM中get和post乱码笔记
  14. Linux内核的Kmemleak实现内存泄露检测
  15. Spark-SQL常用内置日期时间函数
  16. 论文详读《基于改进 LeNet-5 模型的手写体中文识别》
  17. mysql数据库命令备份还原
  18. Mysql基础篇(4)—— 创建和管理表
  19. 88-Spring Boot详解
  20. diskpart命令使用详解

热门文章

  1. java个人小管家代码_java毕业设计_springboot框架的家庭小管家系统
  2. 音乐web网站搭建思路
  3. 新手上路系列 Web服务器搭建篇——IIS的搭建
  4. 关于_REENTRANT宏
  5. 我和卢俊卿的兼职打工经历
  6. 苹果无敌了!颠覆了手机行业又要来颠覆安全套行业
  7. livemail如何对QQ,163,GAMIL等邮箱进行设置
  8. h5页面的雷达图 五边形_程序丨以五边形为例,使用UGUI绘制多边形雷达图
  9. python编程:从入门到实践7-8,7-9,7-10
  10. PyTorch中linspace的详细用法