P1030求先序排列

一、题目描述

 

 二、题目分析

  中序+后序推前序,不过推导的过程中出现了下标数错,尴了个大尬。。。。

三、代码实现

  

 1 #include "bits/stdc++.h"
 2 using namespace std;
 3 char midTree[110];
 4 char aftTree[110];
 5 void printPre(int s,int e,int root)
 6 {
 7     if(s > e)
 8         return;
 9     int i = s;
10     while(i < e && midTree[i] != aftTree[root])
11         i++;
12     cout << aftTree[root];
13     printPre(s,i - 1,root - e + i - 1);//左子树长度为i - 1,那么右子树长度为e - i + 1,那么树根的位置就在root - e + i - 1
14     printPre(i + 1,e,root - 1);
15 }
16 int main()
17 {
18     cin >> midTree;
19     getchar();
20     cin >> aftTree;
21     printPre(0,strlen(aftTree) - 1,strlen(aftTree) - 1);
22     return 0;
23 }

 

posted @ 2022-01-20 19:58  scannerkk  阅读(25)  评论(0)    收藏  举报