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

解题思路

模拟建树推出层序

AC代码

#include <cstdio>
#include <vector>
#include <algorithm>
using namespace std;
int n, a[1005];
vector<int> level[22];
void step(int loc, int len, int lv){
  if (len <= 0) return;
  int t = 1;
  while (t*2 <= len) t *= 2;
  --t;
  int cd = ((len - (len - t)) + 1) / 2 + len - t;

  if (cd <= t + 1){
    level[lv].push_back(a[loc + cd - 1]);
    step(loc, cd - 1, lv + 1);
    step(loc + cd, len - cd, lv + 1);
  }else{
    level[lv].push_back(a[loc + t]);
    step(loc, t, lv + 1);
    step(loc + t + 1, len - t - 1, lv + 1);
  }
}
int main()
{
  scanf("%d", &n);
  for (int i = 0; i < n; ++i){
    scanf("%d", a+i);
  }
  sort(a, a + n);
  step(0, n, 0);
  printf("%d", level[0][0]);
  for (int i = 1; i <= 13; ++i){
    for (int j = 0; j < level[i].size(); ++j){
      printf(" %d", level[i][j]);
    }
  }
  printf("\n");
}

个人游戏推广:

apkName=com.xianyun.yf" target="_blank" align="left">

apkName=com.xianyun.yf" target="_blank" align="left">《10云方》与方块来次消除大战!

时间: 2024-07-31 09:02:10

1064. Complete Binary Search Tree (30)【二叉树】——PAT (Advanced Level) Practise的相关文章

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

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

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

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

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

pat1064. Complete Binary Search Tree (30)

1064. Complete Binary Search Tree (30) 时间限制 100 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue 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

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 n

04-树8. Complete Binary Search Tree (30)

04-树8. Complete Binary Search Tree (30) 时间限制 100 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue 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