(TOJ1223)数据结构练习题——中序遍历二叉树

描述

给定一颗二叉树,要求输出二叉树的深度以及中序遍历二叉树得到的序列。本题假设二叉树的结点数不超过1000。

输入

输入数据分为多组,第一行是测试数据的组数n,下面的n行分别代表一棵二叉树。每棵二叉树的结点均为正整数,数据为0代表当前结点为空,数据为-1代表二叉树数据输入结束,-1不作处理。二叉树的构造按照层次顺序(即第1层1个整数,第2层2个,第3层4个,第4层有8个......,如果某个结点不存在以0代替)

输出

输出每棵二叉树的深度以及中序遍历二叉树得到的序列。

样例输入

2
1 -1
1 2 0 3 4 -1

样例输出

1 1
3 3 2 4 1
 1 #include <stdio.h>
 2 #include <string.h>
 3 #include <ctype.h>
 4 #include <math.h>
 5 
 6 int BiTree[10000];
 7 
 8 void InTraverse(int T[], int e)
 9 {
10   if(T[2*e+1]!=0) InTraverse(T,2*e+1);
11   printf(" %d",T[e]);
12   if(T[2*e+2]!=0) InTraverse(T,2*e+2);
13 }
14 
15 void InOrderTraverse(int T[])
16 {
17     InTraverse(T,0);
18     printf("\n");
19 }
20 
21 int TreeDeep(int T[], int n)
22 {
23     int i;
24     for(i=n-1; i>=0; i--)
25     {
26         if(T[i]!=0)  break;
27     }
28     return (int)(log(i+1)/log(2)+1.1);
29 }
30 
31 int main()
32 {
33     int n,t,i;
34     scanf("%d",&n);
35     while(n--)
36     {
37         i=0;
38         while(scanf("%d",&t) && t!=-1)
39         {
40               BiTree[i++]=t;
41         }
42         printf("%d",TreeDeep(BiTree,i));
43         InOrderTraverse(BiTree);
44     }
45     return 0;
46 }
47     
 
原文地址:https://www.cnblogs.com/xueda120/p/3102885.html