• sdut 2128 排序二叉树的中序遍历


    树结构练习——排序二叉树的中序遍历

    Time Limit: 1000MS Memory limit: 65536K

    题目描述

    在树结构中,有一种特殊的二叉树叫做排序二叉树,直观的理解就是——(1).每个节点中包含有一个关键值 (2).任意一个节点的左子树(如果存在的话)的关键值小于该节点的关键值 (3).任意一个节点的右子树(如果存在的话)的关键值大于该节点的关键值。现给定一组数据,请你对这组数据按给定顺序建立一棵排序二叉树,并输出其中序遍历的结果。
     

    输入

    输入包含多组数据,每组数据格式如下。
    第一行包含一个整数n,为关键值的个数,关键值用整数表示。(n<=1000)
    第二行包含n个整数,保证每个整数在int范围之内。

    输出

    为给定的数据建立排序二叉树,并输出其中序遍历结果,每个输出占一行。
     

    示例输入

    1
    2
    2
    1 20

    示例输出

    2
    1 20
    View Code
     1 #include<stdlib.h>
     2 #include<stdio.h>
     3 typedef struct node
     4 {
     5     int data;
     6     struct node *l, *r;
     7 }tree;
     8 int n;
     9 void build(tree *head, int x)
    10 {
    11     tree *p;
    12     if(head ->data > x)
    13     {
    14         if(head ->l == NULL)
    15         {
    16             p = (tree *)malloc(sizeof(tree));
    17             p -> data = x;
    18             p -> l = NULL;
    19             p -> r = NULL;
    20             head -> l = p;
    21         }
    22         else
    23         {
    24             build(head->l, x);
    25         }
    26     }
    27     else
    28     {
    29         if(head -> r == NULL)
    30         {
    31             p = (tree *)malloc(sizeof(tree));
    32             p -> data = x;
    33             p -> l = NULL;
    34             p -> r = NULL;
    35             head -> r = p;
    36         }
    37         else
    38         {
    39             build(head->r, x);
    40         }
    41     }
    42 }
    43 void midtravel(tree *head)
    44 {
    45     if(head)
    46     {
    47         midtravel(head -> l);
    48         if(n > 1)
    49         {
    50             printf("%d ",head->data);
    51             n --;
    52         }
    53         else printf("%d",head -> data);
    54         midtravel(head -> r);
    55     }
    56     else
    57     return;
    58 }
    59 int main()
    60 {
    61     int i, a;
    62     tree *head;
    63     head = (tree *)malloc(sizeof(tree));
    64     while(scanf("%d",&n) != EOF)
    65     {
    66         for(i = 0; i < n; i ++)
    67         {
    68             scanf("%d",&a);
    69            if(i == 0)
    70            {
    71                head ->data = a;
    72                head ->l = NULL;
    73                head ->r = NULL;
    74            }
    75            else
    76            {
    77                build(head,a);
    78            }
    79         }
    80         midtravel(head);
    81         printf("\n");
    82     }
    83     return 0;
    84 }
  • 相关阅读:
    Codeforces Round 731 (Div.3) 所有题目题解
    NOI2021 同步赛游记
    【题解】CF1547F Array Stabilization (GCD version)
    Codeforces 人类智慧题目大赏
    【题解】CF1559E Mocha and Stars
    OI 日常犯的一些错误
    AtCoder Beginner Contest(ABC) 247 A~G 题解
    【题解】[六省联考 2017] 组合数问题
    Something about My Blog
    【OI 退役记】NOIP2022 游记
  • 原文地址:https://www.cnblogs.com/wanglin2011/p/2609477.html
Copyright © 2020-2023  润新知