• pat1064. Complete Binary Search Tree (30)


    1064. Complete Binary Search Tree (30)

    时间限制
    100 ms
    内存限制
    65536 kB
    代码长度限制
    16000 B
    判题程序
    Standard
    作者
    CHEN, Yue

    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
    

    提交代码

     1 #include<cstdio>
     2 #include<stack>
     3 #include<algorithm>
     4 #include<iostream>
     5 #include<stack>
     6 #include<set>
     7 #include<map>
     8 #include<cmath>
     9 using namespace std;
    10 int line[1005],tree[1005];
    11 void Build(int *line,int *tree,int n,int cur){
    12     if(!n){
    13         return;
    14     }
    15     int h=log(n)/log(2);
    16     int x=n-(pow(2,h)-1);
    17 
    18     //cout<<"x: "<<x<<endl;
    19 
    20     if(x>pow(2,h-1)){
    21        x=pow(2,h-1);
    22     }
    23 
    24     //cout<<"x: "<<x<<endl;
    25 
    26     int l=pow(2,h-1)+x-1;
    27 
    28     //cout<<"l:  "<<l<<endl;
    29 
    30     tree[cur]=line[l];
    31     Build(line,tree,l,cur*2+1);
    32     Build(line+l+1,tree,n-l-1,cur*2+2);
    33 }
    34 int main(){
    35     //freopen("D:\INPUT.txt","r",stdin);
    36     int n,i;
    37     scanf("%d",&n);
    38     for(i=0;i<n;i++){
    39         scanf("%d",&line[i]);
    40     }
    41     sort(line,line+n);
    42     Build(line,tree,n,0);
    43     printf("%d",tree[0]);
    44     for(i=1;i<n;i++){
    45         printf(" %d",tree[i]);
    46     }
    47     printf("
    ");
    48     return 0;
    49 }
  • 相关阅读:
    个人工作总结2
    个人工作总结1
    《梦断代码》阅读笔记01
    构建之法阅读笔记4
    四则运算-安卓版
    最大联通子数组之和(dfs,记忆化搜索,状态压缩)
    第五周进度报告
    第四周进度报告
    最大子数列之和问题
    构建之法阅读笔记3
  • 原文地址:https://www.cnblogs.com/Deribs4/p/4783480.html
Copyright © 2020-2023  润新知