zoukankan      html  css  js  c++  java
  • (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     
     
  • 相关阅读:
    HDOJ 2095 find your present (2)
    HDOJ 2186 悼念512汶川大地震遇难同胞——一定要记住我爱你
    九度 1337 寻找最长合法括号序列
    九度 1357 疯狂地Jobdu序列
    HDOJ 1280 前m大的数
    九度 1343 城际公路网
    九度 1347 孤岛连通工程
    HDOJ 2151 Worm
    九度 1342 寻找最长合法括号序列II
    九度 1346 会员积分排序
  • 原文地址:https://www.cnblogs.com/xueda120/p/3102885.html
Copyright © 2011-2022 走看看