这题 是给你一个二叉树的 先序和中序遍历 让你推导出 后序遍历
蛮有意思的 ...当然 做这题的前提是要 先明白 二叉树的 先序 与 中序 后序 遍历分别是如何实现的
我这边 懒得提了 =_=
我直接贴上 代码吧 因为这真的是 数据结构的基本要求
你还可以去写下 中序与后序遍历 推导出 先序遍历的代码
我也一并贴上了
1 //通过二叉树的 中序遍历和先序遍历 ---> 后序遍历 2 3 #include <iostream> 4 using namespace std; 5 6 const int size = 1010; 7 int pre[size]; 8 int in[size]; 9 bool flag; 10 11 void solve( int* pre , int* in , int len ) 12 { 13 int index = 0; 14 if( len>=1 ) 15 { 16 while( index < len && *pre != *(in+index) ) 17 ++ index; 18 solve( pre+1 , in , index );//左子树 19 solve( pre+index+1 , in+index+1 , len-(index+1) );//右子树 20 if( flag ) 21 { 22 cout << * pre; 23 flag = false; 24 } 25 else 26 cout << " " << *pre; 27 } 28 } 29 30 int main() 31 { 32 cin.sync_with_stdio(false); 33 int n; 34 while( cin >> n ) 35 { 36 flag = true; 37 for( int i = 0 ; i<n ; i++ ) 38 { 39 cin >> pre[i]; 40 } 41 for( int i = 0 ; i<n ; i++ ) 42 { 43 cin >> in[i]; 44 } 45 solve( pre , in , n ); 46 cout << endl; 47 } 48 return 0; 49 }
1 //通过二叉树的 中序遍历和后序遍历 ---> 先序遍历 2 #include <iostream> 3 using namespace std; 4 5 const int size = 1010; 6 int in[size]; 7 int post[size]; 8 bool flag; 9 10 void solve( int* in , int* post , int len ) 11 { 12 int pos = 0; 13 if( len>=1 ) 14 { 15 while( pos<len && *(in+pos) != *(post+len-1) ) 16 { 17 ++ pos; 18 } 19 if( flag ) 20 { 21 cout << *(in+pos); 22 flag = false; 23 } 24 else 25 cout << " " << *(in+pos); 26 solve( in , post , pos );//左子树 27 solve( in+pos+1 , post+pos , len-pos-1 );//右子树 28 } 29 } 30 31 int main() 32 { 33 int n; 34 while( cin >> n ) 35 { 36 flag = true; 37 for( int i = 0 ; i<n ; i++ ) 38 cin >> in[i]; 39 for( int i = 0 ; i<n ; i++ ) 40 cin >> post[i]; 41 solve( in , post , n ); 42 cout << endl; 43 } 44 return 0; 45 } 46 /* 47 9 48 4 7 2 1 8 5 9 3 6 49 7 4 2 8 9 5 6 3 1 50 51 1 2 4 7 3 5 8 9 6 52 */
时间: 2024-10-25 12:18:14