2 条题解
-
0
#include<iostream> #include<algorithm> #include<string.h> using namespace std; char mid[100]; char fir[100]; int i,j; void dian(int fl,int fr,int ml,int mr)//前序遍历的左右边界,中序遍历的左右边界 { int gen,llen,rlen; for(i=0;strlen(mid);i++) if(mid[i]==fir[fl])//找到根节点在中序遍历中的位置 break; gen=i; llen=gen-ml;//记录左子树中节点的数量 rlen=mr-gen;//记录右子树中节点的数量 if(llen>0) { dian(fl+1,fl+llen,ml,ml+llen-1);//递归前序和中序的左子树 } if(rlen>0) { dian(fr-rlen+1,fr,gen+1,gen+rlen);//递归前序和中序的右子树 } cout<<fir[fl];//输出根节点 } int main() { cin>>mid>>fir; dian(0,strlen(fir)-1,0,strlen(mid)-1); return 0; }
信息
- ID
- 1391
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 10
- 标签
- 递交数
- 4
- 已通过
- 3
- 上传者