1064. Complete Binary Search Tree (30)-PAT
来源:互联网 发布:北京网络工程学院 编辑:程序博客网 时间:2024/05/03 16:59
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:101 2 3 4 5 6 7 8 9 0Sample Output:
6 3 8 1 5 7 9 0 2 4
#include<stdio.h>#include<stdlib.h>#include<string.h>#include<iostream>#include<iostream>#include<queue>#include<math.h>using namespace std;int compare(const void *a,const void *b){ return *(int *)a-*(int*)b;}typedef struct Node{ int val; Node *left; Node *right;}Node;void build_tree(int *num,int len,Node **r){ if(len>0){ int i,high; for(i=0;i<1000;i++){ if((int)pow(2.0,i)-1>len){ high=i; break; } } int ct=(int)pow(2.0,high-1)-1; int remain=len-ct; int last_need=(int)pow(2.0,high-1); int left,right; if(remain>last_need/2) left=(ct-1)/2+last_need/2; else left=(ct-1)/2+remain; right=len-left-1; Node * root= new Node; *r=root; root->left=NULL; root->right=NULL; root->val=num[left]; if(left>0) build_tree(num,left,&root->left); if(right>0) build_tree(num+left+1,right,&root->right); }}void print_tree(Node *root){ if(root!=NULL){ queue<Node*> q; q.push(root); printf("%d",root->val); while(!q.empty()){ Node* node=q.front(); if(node!=root) printf(" %d",node->val); if(node->left!=NULL) q.push(node->left); if(node->right!=NULL) q.push(node->right); q.pop(); } }}int main(){ int n,i; scanf("%d",&n); int *num=new int[n]; for(i=0;i<n;i++){ scanf("%d",&num[i]); } qsort(num,n,sizeof(int ),compare); Node *root=NULL; build_tree(num,n,&root); print_tree(root); return 0;}
- 1064. Complete Binary Search Tree (30)-PAT
- 【PAT】1064. Complete Binary Search Tree (30)
- PAT 1064. Complete Binary Search Tree (30)
- pat 1064. Complete Binary Search Tree (30)
- 浙大PAT 1064. Complete Binary Search Tree
- PAT 1064. Complete Binary Search Tree
- PAT 1064. Complete Binary Search Tree
- PAT-A 1064. Complete Binary Search Tree
- PAT|1064. Complete Binary Search Tree
- 【PAT】1064. Complete Binary Search Tree
- 浙大PAT 1064. Complete Binary Search Tree
- PAT--1064. Complete Binary Search Tree
- PAT-Complete Binary Search Tree (30)
- PAT 1022Complete Binary Search Tree (30)
- PAT A1064. Complete Binary Search Tree (30)
- pat-a1064. Complete Binary Search Tree (30)
- PAT A 1064. Complete Binary Search Tree (30)
- PAT-A 1064. Complete Binary Search Tree (30)
- HDOJ 3605 - Escape 状态压缩缩点+最大流
- poj 3623 Best Cow Line, Gold
- sort 和 qsort 小试
- C1FlexGridClassic中根据x坐标和y坐标定位行列
- 删除linux自带的jdk
- 1064. Complete Binary Search Tree (30)-PAT
- enum枚举类型
- Java读取、创建xml(通过dom方式)
- 低头看—SQL视频
- 酒肆老板娘的难题
- 浅谈C语言中的联合体
- Linux入门基础 #2:Linux文件系统基本结构
- Android 系统搜索框(有浏览记录)
- UVA 10115 Automatic Editing