二叉数

二叉树的遍历

二叉数的遍历分为前序遍历,中序遍历,后序遍历。

其命名的方式就是根据根的节点顺序来命名

先序:根左右 / 中序:左根右 / 后序:左右根

其实现方法其实就是类似于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;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值