遍历二叉树

来源:互联网 发布:淘宝模特天天 编辑:程序博客网 时间:2024/06/10 02:45

遍历二叉树

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

20 AB#CD####EF1 AB#CD####EF
 

Sample Output

ABCDEFCBEDFA
#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]);     }} 
原创粉丝点击