zoukankan      html  css  js  c++  java
  • 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 }
  • 相关阅读:
    程序猿节日快乐!
    Haxe UI框架StablexUI的使用备忘与心得(一)
    sudo fdisk -l
    Win7下硬盘安装fedora17
    盎司
    arm-linux工具
    GSM900TCP/UDP连接
    STC51几种简单的延时函数
    STC51六中中断配置点亮一个LED
    LCD1602小程序
  • 原文地址:https://www.cnblogs.com/wanglin2011/p/2609477.html
Copyright © 2011-2022 走看看