申明
再次申明这个专栏只是分享博主学习图论时的顺序,给新手提供一个入门的好方法(博主现在也是新手),具体算法逻辑需要自己学习,因此有错误可以私信或者直接在评论区骂。
前言
首先 一棵二叉树由根结点、左子树和右子树三部分组
前序遍历(根在前,从左往右,一棵树的根永远在左子树前面,左子树又永远在右子树前面 )
中序遍历(根在中,从左往右,一棵树的左子树永远在根前面,根永远在右子树前面)
后序遍历(根在后,从左往右,一棵树的左子树永远在右子树前面,右子树永远在根前面)
在刚学数据结构的时候我们学会了如何用指针存储树,在这里本蒟蒻博主写的是数组表示树的存储,和指针存储类似,重点记住这种方式只能用于二叉树!!!
题目链接
B3642 二叉树的遍历 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)
代码
#include<iostream>
#include<algorithm>
#include<queue>
#include<cstring>
#include<string>
using namespace std;
const int N=1e6+10;
struct tree
{
int left,right;
}q[N];
int n;
void qian(int x) //不要问我为什么用中文,问就是不会English
{
if(x==0) return;
printf("%d ",x);
qian(q[x].left);
qian(q[x].right);
}
void zhong(int x)
{
if(x==0) return;
zhong(q[x].left);
printf("%d ",x);
zhong(q[x].right);
}
void hou(int x)
{
if(x==0) return;
hou(q[x].left);
hou(q[x].right);
printf("%d ",x);
}
int main()
{
scanf("%d",&n);
for(int i=1;i<=n;i++) //存二叉树
{
int l,r;
scanf("%d %d",&l,&r);
q[i].left=l,q[i].right=r;
}
qian(1);
printf("\n");
zhong(1);
printf("\n");
hou(1);
return 0;
}