PAT 1064

1、qsort用法又错了:

//qsort(node,sizeof(node),sizeof(int),cmp);//错误!sizeof(node) = 4不是数组长度!
	qsort(node,N,sizeof(int),cmp);

2、数组长度由输入值决定:

int * node;
int N;
scanf("%d", &N);
	node = new int[N];

3、重要的关于生成完全二叉查找树:

http://blog.csdn.net/IAccepted/article/details/20726067

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

int * node;
int * tree;
int N,pos;

int cmp(const void * a, const void *b){
	return (*(int *)a - *(int *)b);

}

void build(int root){
	if(root > N) return;

	int lchild = root<<1;
	build(lchild);

	tree[root] = node[pos++];

	int rchild = (root<<1)+1;
	build(rchild);
}


int main(){
	//freopen("in.txt","r",stdin);
	int i;

	pos = 0;

	scanf("%d", &N);
	node = new int[N];
	for(i=0; i<N; i++){
		scanf("%d", &node[i]);
	}

	//qsort(node,sizeof(node),sizeof(int),cmp);//错误!sizeof(node) = 4不是数组长度!
	qsort(node,N,sizeof(int),cmp);

	tree = new int[N];

	//build(0);//不能以0开始,因为2*0 = 0
	build(1);

	printf("%d",tree[1]);
	for(i=2; i<=N; i++){
		printf(" %d",tree[i]);
	}


	return 0;
}


你可能感兴趣的:(PAT 1064)