04-樹5 Complete Binary Search Tree

題目
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 NN (\le 1000≤1000). Then NN 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. 將輸入的序列按遞增排好序
  2. 排好序的序列可以通過中序構造來構造完全二叉搜索樹,同時利用好左兒子是根的2倍,右兒子是根的2倍+1,這個完全二叉樹的特點

代碼如下

#include <stdio.h>
#include <algorithm>

using namespace std;

const int Max = 1005;
int node[Max];
int tree[Max];
int pos,n;

void build(int root){
    if(root > n)
        return;
    int left = root<<1;
    int right = (root<<1)+1;
    build(left);
    tree[root] = node[pos++];
    build(right);
}

int main(){
    int i;
    scanf("%d",&n);
    for(i=0;i<n;i++){
        scanf("%d",&(node[i]));
    }
    sort(node,node+n);
    pos = 0;
    build(1);
    printf("%d",tree[1]);
    for(i=2;i<=n;i++){
        printf(" %d",tree[i]);
    }
    return 0;
}
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 背景 一年多以前我在知乎上答了有關LeetCode的問題, 分享了一些自己做題目的經驗。 張土汪:刷leetcod...
    土汪閱讀 12,766評論 0 33
  • 各位書友大家好!今天和大家一起拆解的書叫《書都不會讀,你還想成功》。這本書的作者之一二志成是韓國的國民導師,在韓國...
    核心迎春閱讀 972評論 6 16
  • 2017.10.31 最近入秋,很多樹葉黃了。 心里總是很癢癢,想去香山看看紅葉,但是印象從前去過幾次香山,從沒在...
    摹喵居士閱讀 188評論 0 0
  • 百萬大軍齊壓境, 爭得天驕各一人。 待到金榜題名時, 要它此生換長生! 祝弟高考成功。 ???
    煜煜煜閱讀 173評論 0 0
  • 感覺給我一幅畫,照著畫并不難,難的是自己走在了創作的路上,有可能遇到不可預知的結果,﹋o﹋走到了邪性的路上,每次畫...
    小齊先生閱讀 172評論 0 0