ACM--二叉树遍历

 九度oj地址:点击打开链接

题目1184:二叉树遍历

时间限制:1 秒

内存限制:32 兆

特殊判题:

提交:1562

解决:621

题目描述:

编一个程序,读入用户输入的一串先序遍历字符串,根据此字符串建立一个二叉树(以指针方式存储)。
例如如下的先序遍历字符串:
ABC##DE#G##F###
其中“#”表示的是空格,空格字符代表空树。建立起此二叉树以后,再对二叉树进行中序遍历,输出遍历结果。

输入:

输入包括1行字符串,长度不超过100。

输出:

可能有多组测试数据,对于每组数据,
输出将输入字符串建立二叉树后中序遍历的序列,每个字符后面都有一个空格。
每个输出结果占一行。

样例输入:
abc##de#g##f###
样例输出:
c b e g d f a 
来源:
2002年华中科技大学计算机研究生机试真题
  1. /********************************* 
  2.  *    日期:2013-3-7 
  3.  *    作者:SJF0115 
  4.  *    题号: 九度OJ 题目1184:二叉树遍历 
  5.  *    来源:http://ac.jobdu.com/problem.php?pid=1184 
  6.  *    结果:AC 
  7.  *    来源:2002年华中科技大学计算机研究生机试真题 
  8.  *    总结: 
  9. **********************************/  
  10. #include<stdio.h>  
  11. #include<stdlib.h>  
  12. #include<string.h>  
  13.   
  14. char array[101];  
  15.   
  16. //二叉树结点  
  17. typedef struct BiTNode{  
  18.     char data;  
  19.     struct BiTNode *lchild,*rchild;  
  20. }BiTNode,*BiTree;  
  21.   
  22. //按先序序列创建二叉树  
  23. int CreateBiTree(BiTree &T,int &index,int &n){  
  24.     if(index == n){  
  25.         return 0;  
  26.     }  
  27.     //按先序次序输入二叉树中结点的值(一个字符),‘#’表示空树  
  28.     if(array[index] == '#'){  
  29.         T = NULL;  
  30.         index++;  
  31.     }  
  32.     else{  
  33.         T = (BiTree)malloc(sizeof(BiTNode));  
  34.         //生成根结点  
  35.         T->data = array[index];  
  36.         index++;  
  37.         //构造左子树  
  38.         CreateBiTree(T->lchild,index,n);  
  39.         //构造右子树  
  40.         CreateBiTree(T->rchild,index,n);  
  41.     }  
  42.     return 0;  
  43. }  
  44. //输出  
  45. void Visit(BiTree T){  
  46.     if(T->data != '#'){  
  47.         printf("%c ",T->data);  
  48.     }  
  49. }  
  50. //中序遍历  
  51. int InOrder(BiTree T){  
  52.     if(T != NULL){  
  53.         //访问左子结点  
  54.         InOrder(T->lchild);  
  55.         //访问根节点  
  56.         Visit(T);  
  57.         //访问右子结点  
  58.         InOrder(T->rchild);  
  59.     }  
  60.     return 0;  
  61. }  
  62. int main()  
  63. {  
  64.     int len,index;  
  65.     while(scanf("%s",array) != EOF){  
  66.         BiTree T;  
  67.         len = strlen(array);  
  68.         index = 0;  
  69.         //创建二叉树  
  70.         CreateBiTree(T,index,len);  
  71.         //中序遍历  
  72.         InOrder(T);  
  73.         printf("\n");  
  74.     }  
  75.     return 0;  
  76. }  

参考:http://blog.csdn.net/sjf0115/article/details/8645571


你可能感兴趣的:(ACM--二叉树遍历)