• 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         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 }
    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         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 */
    View Code
    just follow your heart
  • 相关阅读:
    .net的委托和事件的直接理解[转载]
    虚函数 多态 函数重载[转载]
    自动化 object <> xml
    用System.Web.HttpRequest模拟一个form的post
    【WP7】动画的使用
    【WP7】关于ListBox控件的数据绑定
    【WP7】坐标变换
    【WP7】页面之间数据交互
    【WP7】调用系统LED灯
    【WP7】MediaPlayer与关闭音乐的方法
  • 原文地址:https://www.cnblogs.com/radical/p/4060356.html
Copyright © 2020-2023  润新知