zoukankan      html  css  js  c++  java
  • 04-树5 Complete Binary Search Tree

    这题也是第二次做,本想第一次做时参考的算法会和老师讲的一样,不想老师讲的算法用在这题感觉还不如思雪园友的算法(http://www.cnblogs.com/sixue/archive/2015/04.html)来的简单,不过老师给的思路是一种挺通用的思路,可以用来解决一系列的问题,但我目前看着有点吃力。我坚持认为对全局变量的使用需十分谨慎,能不用就不用,所以为了不出现全局变量,就无辜多了一串参数。实现代码如下,题目在代码下方

     1 #include <stdio.h>
     2 #include <stdlib.h>
     3 
     4 int compare(const void * a,  const void * b);
     5 void inOrder(int * a, int n, int * in, int N);
     6 
     7 int main()
     8 {
     9 //    freopen("in.txt", "r", stdin); // for test
    10     int i, N, n;
    11     scanf("%d", &N);
    12     int a[N];
    13     for(i = 0; i < N; i++)
    14     {
    15         scanf("%d", &n);
    16         a[i] = n;
    17     }
    18     
    19     qsort(a, N, sizeof(int), compare);
    20     int in[N + 1];
    21     inOrder(a, 1, in, N);
    22     for(i = 1; i <= N; i++)
    23     {
    24         printf("%d", in[i]);
    25         if(i < N)
    26             printf(" ");
    27         else
    28             printf("
    ");
    29     }
    30 //    fclose(stdin); // for test
    31     return 0;
    32 }
    33 
    34 int compare(const void * a, const void * b)
    35 {
    36     return *(int *)a - *(int *)b;
    37 }
    38 
    39 void inOrder(int * a, int n, int * in, int N)
    40 {
    41     static int i = 0;
    42     
    43     if(n * 2 <= N)
    44         inOrder(a, 2 * n, in, N);
    45     in[n] = a[i++];
    46     if(n * 2 + 1 <= N)
    47         inOrder(a, n * 2 + 1, in, N);
    48 }

    A Binary Search Tree (BST) is recursively defined as a binary tree which has the following properties:

    • The left subtree of a node contains only nodes with keys less than the node's key.
    • The right subtree of a node contains only nodes with keys greater than or equal to the node's key.
    • Both the left and right subtrees must also be binary search trees.

    A Complete Binary Tree (CBT) is a tree that is completely filled, with the possible exception of the bottom level, which is filled from left to right.

    Now given a sequence of distinct non-negative integer keys, a unique BST can be constructed if it is required that the tree must also be a CBT. You are supposed to output the level order traversal sequence of this BST.

    Input Specification:

    Each input file contains one test case. For each case, the first line contains a positive integer N (<=1000). Then N distinct non-negative integer keys are given in the next line. All the numbers in a line are separated by a space and are no greater than 2000.

    Output Specification:

    For each test case, print in one line the level order traversal sequence of the corresponding complete binary search tree. All the numbers in a line must be separated by a space, and there must be no extra space at the end of the line.

    Sample Input:

    10
    1 2 3 4 5 6 7 8 9 0
    

    Sample Output:

    6 3 8 1 5 7 9 0 2 4
  • 相关阅读:
    Pandas数据存取
    Pandas统计分析
    (4)awk读取行的细节
    (3)awk命令行结构和语法结构
    安装新版gawk
    (2)BEGIN和END语句块
    (1)AWK快速入门
    shell读取文件的几种方式
    Docker 部署 elk + filebeat
    Linux之关于用户的几个重要配置文件
  • 原文地址:https://www.cnblogs.com/qingkai/p/4437050.html
Copyright © 2011-2022 走看看