码迷,mamicode.com
首页 > 其他好文 > 详细

Complete Binary Search Tree

时间:2018-04-04 21:03:23      阅读:168      评论:0      收藏:0      [点我收藏+]

标签:data   next   which   enc   c代码   int   ret   node   file   

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 Ndistinct 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

AC代码

 1 #include<stdio.h>
 2 #include<iostream>
 3 #include<algorithm>
 4 //using namespece std;
 5 
 6 typedef struct TreeNode{
 7   int left;
 8   int right;
 9   int key;
10 }CBT;
11 
12 void AddKeytoCBT(CBT T[],int i,int data[],int *k,int N){
13     if(i<=N){
14       AddKeytoCBT(T,2*i,data,k,N);
15       T[i].key = data[*k];
16       (*k)++;
17       AddKeytoCBT(T,2*i+1,data,k,N);
18     }
19     return;
20 }
21 
22 
23 int main(){
24   int N;
25   int k = 1;
26   scanf("%d",&N);
27   CBT T[N+1];
28   int data[N+1];
29   for(int i = 1;i<N+1;i++){
30     scanf("%d",&data[i]);
31     
32   }
33   for(int i = 1; i <=N;i++){
34     T[i].left = 2*i;
35     T[i].right = 2*i+1;
36   }
37   std::sort(&data[1],&data[1]+N);   //特别注意
38   AddKeytoCBT(T,1,data,&k,N);
39   for(int i = 1; i <= N; i++){
40     if(i==1){
41       printf("%d",T[i].key);
42     }else{
43       printf(" %d",T[i].key);
44     }
45   }
46   return 0;
47 }

技术分享图片

 

 

Complete Binary Search Tree

标签:data   next   which   enc   c代码   int   ret   node   file   

原文地址:https://www.cnblogs.com/jinjin-2018/p/8718702.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!