首页 > 代码库 > 二叉树的输入

二叉树的输入

链接:http://acm.sdibt.edu.cn/JudgeOnline/problem.php?id=2746

Description

 

用二叉树的带虚结点表示的前序遍历序可以唯一的确定一棵二叉树。

 

Input

输入包含多组数据。
每行是一棵二叉树的带虚结点(#)表示的前序遍历序串,长度不超过2000。每个结点为一个字符。

Output

对每行输入,输出对应二叉树的中序遍历序(不含虚结点)、后序遍历序(不含虚结点)和层次遍历序(不含虚结点)。

 
每棵二叉树的输出占一行,中序遍历序、后序遍历序和层次遍历序之间用一个空格隔开。

Sample Input

ab##c##
#
ab###
Sample Output

bac bca abc
ba ba ab

 

 

  1 #include<stdio.h>  2 #include<stdlib.h>  3 #include<string.h>  4 #include<queue>  5 #include <iostream>  6 using namespace std;  7 typedef struct node  8 {  9     char data; 10     struct node*lchild,*rchild; 11 } pjq; 12 char ch; 13 void creat(pjq **p,int a)//先序建树 14 { 15     *p=NULL; 16     if(a) 17         ch=getchar(); 18     else 19         a=1; 20     if(ch==\n) 21         return; 22     else 23     { 24         if(ch==#) 25             *p=NULL; 26         else 27         { 28             *p=(pjq *)malloc(sizeof(pjq)); 29             (*p)->data=http://www.mamicode.com/ch; 30             creat(&((*p)->lchild),a); 31             creat(&((*p)->rchild),a); 32         } 33     } 34 } 35 void print1(pjq *p)//中序输出树 36 { 37     if(p!=NULL) 38     { 39         print1(p->lchild); 40         printf("%c",p->data); 41         print1(p->rchild); 42     } 43 } 44 void print2(pjq *p)//后序输出树 45 { 46     if(p!=NULL) 47     { 48         print2(p->lchild); 49         print2(p->rchild); 50         printf("%c",p->data); 51     } 52 } 53 void print3(pjq *b)//层次遍历输出树 54 { 55     if(b==NULL) 56         return ; 57     pjq *p; 58     pjq *q[2050]; 59     int front,last; 60     front=last=-1; 61     last++; 62     q[last]=b; 63     while(front!=last) 64     { 65         front=(front+1); 66         p=q[front]; 67         printf("%c",p->data); 68         if(p->lchild!=NULL) 69         { 70             last++; 71             q[last]=p->lchild; 72         } 73         if(p->rchild!=NULL) 74         { 75             last++; 76             q[last]=p->rchild; 77         } 78     } 79 } 80 int main() 81 { 82     pjq *p=NULL; 83     while((ch=getchar())!=EOF) 84     { 85         if(ch==#) 86             printf("\n"); 87         else 88         { 89             int a=0; 90             creat(&p,a); 91             print1(p); 92             printf(" "); 93             print2(p); 94             printf(" "); 95             print3(p); 96             printf("\n"); 97         } 98         getchar(); 99     }100     return 0;101 }

 

二叉树的输入