PAT 1064 Complete Binary Search Tree[二叉树][难]

Posted bluebluesea

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PAT 1064 Complete Binary Search Tree[二叉树][难]相关的知识,希望对你有一定的参考价值。

1064 Complete Binary Search Tree (30)(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 (<=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

 题目大意:给出一组数,构建对应的唯一的二叉搜索树,并且要求这棵二叉树树是完全二叉树。

 //看到题目感觉很懵,完全没有做过这样的题。

 代码来自:https://www.nowcoder.com/questionTerminal/ab6b7429f9c34880837cf4830b2434df

#include<cstdio>
#include<algorithm>
using namespace std;
int node[1010],tree[1010];
int N,pos;
void creatTree(int root){//就相当于顺序着把根安排在了tree上。
    //递归安排上了之后自然就是层次存储。
    if(root>N)    return;
    int lchild=root*2,rchild=root*2+1;
    creatTree(lchild);
    tree[root]=node[pos++];
    creatTree(rchild);
}
bool cmp(int a,int b){
    return a<b;
}
int main(){
    scanf("%d",&N);
    for(int i=0;i<N;i++){
        scanf("%d",&node[i]);
    }
    sort(node,node+N,cmp);//既然是二叉搜索树,那么排序完了之后自然就是中序遍历。
    pos=0;
    creatTree(1);
    for(int i=1;i<=N;i++){//注意下标是从1开始计算的。
        printf("%d",tree[i]);
        if(i<N){
            printf(" ");
        }
    }
}

 

1.根据完全二叉树在数组中的存储特点,下标的特点。

2.

以上是关于PAT 1064 Complete Binary Search Tree[二叉树][难]的主要内容,如果未能解决你的问题,请参考以下文章

PAT_A1064 Complete Binary Search Tree

PAT Advanced 1064 Complete Binary Search Tree (30分)

PAT Advanced Level 1064 Complete Binary Search Tree (30)(30 分)

1064. Complete Binary Search Tree (30)二叉树——PAT (Advanced Level) Practise

PAT (Advanced Level) 1064. Complete Binary Search Tree (30)

PAT甲题题解-1064. Complete Binary Search Tree (30)-中序和层次遍历,水