PTA 04-树6 Complete Binary Search Tree
来源:互联网 发布:工业产品网络推广 编辑:程序博客网 时间:2024/06/13 23:24
先出给题把。
04-树6 Complete Binary Search Tree (30分)
A Binary Search Tree (BST) is recursively defined as a binary tree which has the following properties:
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 0
Sample Output:
6 3 8 1 5 7 9 0 2 4
这道题我自己做想了会,后来看了解答才AC的。感觉和那道Tree Traversal Again好相似啊。用数组表示,再递归小数组,最后给个返回条件返回。
下面给出根据陈越老师讲的算法,AC了的代码。
#include"stdio.h"#include"stdlib.h"#include"math.h"#define MAXSIZE 1000int T[MAXSIZE];int A[MAXSIZE];int flag=1;int GetLeftLength(int n){int L,X,result;double n1=n;result= log(n1+1)/log(2.0) ;X=n+1-pow(2.0,result);X=X<pow(2.0,result-1)?X:pow(2.0,result-1);return (pow(2.0,result-1)+X-1);}void solve(int ALeft,int ARight,int TRoot) //ALeft在树数列中根节点下标,ARight是树最后一个叶节点下标,TRoot为得到的结果数列中,该树数列的根节点所在的下标{int n,L;//n代表数列中元素个数,L代表左子树的个数n=ARight-ALeft+1;if(!n)return;L=GetLeftLength(n);T[TRoot]=A[ALeft+L];//给结果树的目标位置放上元素solve(ALeft,ALeft+L-1,TRoot*2+1);//递归解决左子树数列solve(ALeft+L+1,ARight,TRoot*2+2);return;} int compare(const void* a,const void* b){return *(int*)a-*(int*)b;}int main(){int sum,i;scanf("%d",&sum);for(i=0;i<sum;i++)scanf("%d",&(A[i]));qsort(A,sum,sizeof(int),compare);solve(0,sum-1,0);for(i=0;i<sum;i++){if(flag==1) {flag=0;printf("%d",T[i]);}elseprintf(" %d",T[i]);}system("pause");return 0;}忙碌的一天结束了!
- PTA 04-树6 Complete Binary Search Tree
- 04-树6 Complete Binary Search Tree
- 04-树6 Complete Binary Search Tree
- 04-树6 Complete Binary Search Tree
- 04-树6 Complete Binary Search Tree
- 04-树6 Complete Binary Search Tree
- 04-树6 Complete Binary Search Tree
- 04-树6 Complete Binary Search Tree
- 04-树6 Complete Binary Search Tree
- 04-树6 Complete Binary Search Tree
- 04-树5. Complete Binary Search Tree
- 04-树6 Complete Binary Search Tree (30分)
- 04-树6 Complete Binary Search Tree (30分)
- 04-树6 Complete Binary Search Tree (30分)
- 04-树6 Complete Binary Search Tree (30分)
- 04-树6 Complete Binary Search Tree
- 04-树6 Complete Binary Search Tree (30分)
- 04-树6 Complete Binary Search Tree (30分)
- WebService学习总结(四)——调用第三方提供的webService服务
- Javascript创建对象的几种方式
- 关于javassist.NotFoundException
- 线性降维方法PCA和LDA
- DBScan聚类算法Java实现
- PTA 04-树6 Complete Binary Search Tree
- 第四周项目四(1)-程序分析
- 指针与引用
- php中require,include,use区分
- N皇后Java算法
- 慕课 springmvc拦截器
- 仿qq侧滑删除的一个自定义View,独立的,不需要依赖其他的view
- java基础之泛型
- 逆康拓展开展开