遍历二叉树

遍历二叉树

Acceteped : 500  Submit : 794
Time Limit : 1000 MS Memory Limit : 65536 KB
 

Description

根据输入重构一个二叉树,输出按不同顺序遍历的节点序列


数据输入:

第一行是一个整数N(1<=N<=20),表示有多少个测试例子,以下每行是一个测试例子。每个测试例子第一个是一个整数M,表示输出的遍历顺序,其中M=0,表示前序;M=1,表示中序;M=2,表示后序。然后是一个字符序列,字符序列由A-Z和#表示,A-Z表示节点,#表示空。如果字符所在字符串的位置为i(i为正整数,位置从1开始计数),则位置为i*2,i*2+1的节点为它的子节点。如果i*2,i*2+1超过字符串长度,表示子节点为空。


数据输出:

每行输出一个例子的结果。一个字符串,中间无空格。

 

Sample Input

2
0 AB#CD####EF
1 AB#CD####EF
 

Sample Output

ABCDEF
CBEDFA
#include<iostream>
using namespace std;
int main()
{
    void preordertrave(char T[],int i);
    void inordertrave(char T[],int i);
    void pastordertrave(char T[],int i);
    int isnull(char T[],int i);
    int m,n,i;
    char s[1000];
    cin>>n;
    while(n--)
    {
        cin>>m;
        getchar();
        gets(s+1);
        s[0]=strlen(s+1);
       if(m==0)
       //switch(m)
      // {case 0:
            preordertrave(s,1);//break;
        else if(m==1)
       //case 1:
             inordertrave(s,1);//break;
        else if(m==2)
    //   case 2:
              pastordertrave(s,1);//break;
      //        }
        cout<<endl;
    }
 //   system ("pause");
    return 0;
}

int isnull(char T[],int i)
{
    return !(i>0&&i<=T[0]&&T[i]!='#');
    
}
void preordertrave(char T[],int i)
{
     if(!isnull(T,i))
     {
          putchar(T[i]);
       // cout<<T[i];
        preordertrave(T,i*2);
        preordertrave(T,i*2+1);
     }
     
}
void inordertrave(char T[],int i)
{
     if(!isnull(T,i))
     {
          inordertrave(T,i*2);
          //cout<<T[i];
          putchar(T[i]);
          inordertrave(T,i*2+1);
     }
}
void pastordertrave(char T[],int i)
{
     if(!isnull(T,i))
     {
        pastordertrave(T,i*2);
        pastordertrave(T,i*2+1);
        //cout<<T[i];
        putchar(T[i]);
     }
} 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值