zoukankan      html  css  js  c++  java
  • 1064 Complete Binary Search Tree (30分)(已知中序输出层序遍历)

    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 (≤). 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

    题目分析:刚开始我想的是先把末尾的多余的元素 计入计算根节点的位置 但欠缺考虑到对于k层树来说
    若第k层元素大于2的k-1次 我这样的做法就出了问题

    只过了2个点(21分) //给分真高
     1 #define _CRT_SECURE_NO_WARNINGS
     2 #include <climits>
     3 #include<iostream>
     4 #include<vector>
     5 #include<queue>
     6 #include<map>
     7 #include<set>
     8 #include<stack>
     9 #include<algorithm>
    10 #include<string>
    11 #include<cmath>
    12 using namespace std;
    13 int Array[1010];
    14 int Queue[1010];
    15 void EnQueue(int begin, int end,int pos) //左闭右开
    16 {
    17     if (begin >= end)
    18         return;
    19     Queue[pos] = Array[(begin + end) / 2];
    20     EnQueue(begin, (begin + end)/2, 2 * pos + 1);
    21     EnQueue((begin + end) / 2 + 1, end, 2 * pos + 2);
    22 }
    23 int main()
    24 {
    25     int N;
    26     cin >> N;
    27     for (int i = 0; i < N; i++)
    28         cin >> Array[i];
    29     sort(Array, Array + N);
    30     int sum = 1;
    31     for (; sum * 2 < N; sum *= 2);
    32     int offset = (N - sum)/2;
    33     int i = 0;
    34     Queue[i] = Array[N / 2 + offset]; //根节点入队
    35     //分别递归处理左右
    36     EnQueue(0, N / 2 + offset, 2 * i + 1);
    37     EnQueue(N / 2 + offset + 1,N,2 * i + 2);
    38     for (int i = 0; i < N - 1; i++)
    39         cout << Queue[i] << " ";
    40     if(N!=0)
    41         cout << Queue[N- 1];
    42     return 0;
    43 }
    View Code

    参考别人的做法
     1 #define _CRT_SECURE_NO_WARNINGS
     2 #include <climits>
     3 #include<iostream>
     4 #include<vector>
     5 #include<queue>
     6 #include<map>
     7 #include<set>
     8 #include<stack>
     9 #include<algorithm>
    10 #include<string>
    11 #include<cmath>
    12 using namespace std;
    13 int Array[1010];
    14 int Queue[1010];
    15 int N;
    16 int id;
    17 void EnQueue(int root) //左闭右开
    18 {
    19     if (root >= N)
    20         return;
    21     EnQueue(2 * root + 1);
    22     Queue[root] = Array[id++];
    23     EnQueue(2 * root + 2);
    24 }
    25 int main()
    26 {
    27     cin >> N;
    28     for (int i = 0; i < N; i++)
    29         cin >> Array[i];
    30     sort(Array, Array + N);
    31     EnQueue(0);
    32     for (int i = 0; i < N - 1; i++)
    33         cout << Queue[i] << " ";
    34     cout << Queue[N - 1];
    35     return 0;
    36 }
    View Code

    来自https://blog.csdn.net/feng_zhiyu/article/details/82219702

    果然 很多代码真的是又短又好 虽然原理简单 但体现出的思想正是让我感到震撼

     
  • 相关阅读:
    Auto.js常用控件整理
    python对接口sign签名操作
    # 859.亲密字符串
    linux系统如何挂载FTP共享文件
    解决“Tomcat控制台输出乱码问题”
    关于“Unknown or unsupported command 'install'”问题解决的小结
    输出九九乘法表
    python webdriver混合驱动测试框架(数据驱动+关键字驱动)
    python webdriver关键字框架
    python webdriver测试框架--数据驱动DB驱动
  • 原文地址:https://www.cnblogs.com/57one/p/12063555.html
Copyright © 2011-2022 走看看