首页 > 代码库 > hdu--1710--二叉树的各种遍历间的联系

hdu--1710--二叉树的各种遍历间的联系

这题 是给你一个二叉树的 先序和中序遍历 让你推导出 后序遍历

蛮有意思的 ...当然 做这题的前提是要 先明白 二叉树的 先序 与 中序 后序 遍历分别是如何实现的

我这边 懒得提了 =_=

我直接贴上 代码吧   因为这真的是 数据结构的基本要求

你还可以去写下 中序与后序遍历 推导出 先序遍历的代码

我也一并贴上了

 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         else26             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 }
View Code

 

 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         else25             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 948 4 7 2 1 8 5 9 3 649 7 4 2 8 9 5 6 3 150 51 1 2 4 7 3 5 8 9 652 */
View Code

 

hdu--1710--二叉树的各种遍历间的联系