Complete Binary Search Tree

Posted 又啦

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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 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的主要内容,如果未能解决你的问题,请参考以下文章

04-树6 Complete Binary Search Tree

1064. Complete Binary Search Tree (30)

PAT 1064. Complete Binary Search Tree

Complete Binary Search Tree

7-7 Complete Binary Search Tree (30分)

PAT_A1064 Complete Binary Search Tree