1064 Complete Binary Search Tree (30 分)完全二叉树

1064 Complete Binary Search Tree (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 NNN (≤1000\le 1000≤1000). Then NNN 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思路:  由于要输出的是一个完全二叉树且是二叉搜索树。所以使用顺序表存储,对各个顶点的编号方法是自左到右,自上而下。所以只需要在建立树以后,遍历数组输出即可,当然使用标准的二叉树层次遍历算法也可以。建立树的方法使用中序遍历,因为二叉搜索树的中序遍历结果是有序的。
#include<iostream>
#include<vector>
#include<algorithm>
#include<queue>
#include<string>
#include<map>
#include<set>
using namespace std;
int k=1;
void create(int tree[],int root,int n,int a[])
{
    if(root>n)
        return;
    create(tree,2*root,n,a);
    tree[root]=a[k++];
    create(tree,2*root+1,n,a);
}

void level(int tree[],int n)
{
    queue<int> qu;
    qu.push(1);
    cout<<tree[1];
    while(!qu.empty())
    {
        int temp=qu.front();
        qu.pop();
        if(2*temp<=n)
        {
            qu.push(2*temp);
            cout<<" "<<tree[2*temp];
        }
        if(2*temp+1<=n)
        {
            qu.push(2*temp+1);
            cout<<" "<<tree[2*temp+1];
        }
    }
}

int main()
{
    int n;
    cin>>n;
    int a[n+1];
    for(int i=1;i<n+1;i++)
        cin>>a[i];
    sort(a+1,a+n+1);
    int tree[n+1];
    create(tree,1,n,a);
    //level(tree,n);
    cout<<tree[1];
    for(int i=2;i<n+1;i++)
        cout<<" "<<tree[i];
    return 0;
}
 

原文地址:https://www.cnblogs.com/zhanghaijie/p/10308327.html

时间: 2024-12-29 11:55:06

1064 Complete Binary Search Tree (30 分)完全二叉树的相关文章

PAT Advanced 1064 Complete Binary Search Tree (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 greate

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

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

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

题目信息 1064. Complete Binary Search Tree (30) 时间限制100 ms 内存限制65536 kB 代码长度限制16000 B 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 tha

1064. Complete Binary Search Tree (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

7-7 Complete Binary Search Tree (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 greate

04-树6 Complete Binary Search Tree (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 greate

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

因为是要构造完全二叉树,所以树的形状已经确定了. 因此只要递归确定每个节点是多少即可. #include<cstdio> #include<cstring> #include<cmath> #include<queue> #include<vector> #include<string> #include<stack> #include<map> #include<algorithm> using

A1064 Complete Binary Search Tree (30分)

一.技术总结 这一题就是将给的数,构造一个完全二叉排序树 关键就是要利用完全二叉树的特点,如果该结点的下标是x,那么左子树的结点下标一定是2 x,右子树下标是2x+1,然后二叉排序树的中序遍历是从小到大的. 二.参考代码 #include<bits/stdc++.h> using namespace std; const int maxn = 1010; //n为结点数,number用以存放结点权值,CBT用以存放完全二叉树 //index从小到大枚举number数组 int n, numbe

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

由于是满二叉树,用数组既可以表示父节点是i,则左孩子是2*i,右孩子是2*i+1另外根据二分搜索树的性质,中序遍历恰好是从小到大排序因此先中序遍历填充节点对应的值,然后再层次遍历输出即可. 又是一道遍历的水题... #include <iostream> #include <cstdio> #include <algorithm> #include <string.h> #include <queue> using namespace std;

PAT:1064. Complete Binary Search Tree (30) AC

#include<stdio.h> #include<algorithm> using namespace std; const int MAX=1010; int n; int arr[MAX]; //存放原始数组 int arrI=0; int CBT[MAX]; //二叉排序树层序遍历序列[思维]中序遍历在数组中存放的就是层序遍历序列 void inorder(int root) { if(root>n) return; inorder(root*2); CBT[roo