二叉树的遍历
二叉数的遍历分为前序遍历,中序遍历,后序遍历。
其命名的方式就是根据根的节点顺序来命名
先序:根左右 / 中序:左根右 / 后序:左右根
其实现方法其实就是类似于dfs,一直搜索,例如中序,一直往左节点搜,搜到不
能搜的时候就输出此点然后往右节点搜
中序的伪代码
search()
{
search(左);
printf(自己);
search(右);
}
中序前序后序的伪代码只是交换一下三者的顺序而已
例题洛谷 P1030 求先序排列 题目链接https://www.luogu.com.cn/problem/P1030
此题给你中序遍历以及后序遍历求前序遍历
首先要知道后序遍历的最后一个节点就是就是根节点
而在中序中找到根节点后,那么在中序中根节点的左边数字左边的部分,右边就
是右边的部分,然后递归即可。
易错警示:注意递归的时候要写出跳出的出口 我第一次没写
代码来源于洛谷
#include<cstdio>
#include<iostream>
#include<cstring>
using namespace std;
void beford(string in,string after){
if (in.size()>0){//一定要写判断条件
char ch=after[after.size()-1];
cout<<ch;//找根输出
int k=in.find(ch);
beford(in.substr(0,k),after.substr(0,k));
beford(in.substr(k+1),after.substr(k,in.size()-k-1));//递归左右子树;
}
return ;
}
int main(){
string inord,aftord;
cin>>inord;cin>>aftord;//读入
beford(inord,aftord);cout<<endl;
return 0;
}