最后输出的结果为什么正好满足后序“左右根”
查看原帖
最后输出的结果为什么正好满足后序“左右根”
1114211
leeon666楼主2024/7/24 17:27

为什么每一轮递归都要输出a[x];这个子树的根,先左子树遍历,再右子树遍历,这样最后输出的结果为什么正好满足后序“左右根”,而不是按照递归程序运行的顺序输出右左根

#include<bits/stdc++.h>
#define ll long long
using namespace std;

string a,b;

void houxu(int x,int y,int p,int q){//x->y为前序,p->q为中序
	if(x>y||p>q) return;
	int i=b.find(a[x]);//a[x]为root,i为root在中序中的下标
	//左子树长度为i-p
	houxu(x+1,x+i-p,p,i-1);//左子树:前序的左子树和中序的左子树
	houxu(x+i-p+1,y,i+1,q);//右子树:前序的右子树和中序的右子树
	cout<<a[x];
}

int  main()
{
	ios::sync_with_stdio(false);
	cin.tie(nullptr);
	cin>>b>>a;
	int l=a.length()-1;
	houxu(0,l,0,l);
	return 0;
}
2024/7/24 17:27
加载中...