堆栈排序指针问题
我写了个代码,编译没错,运行错误,应该是指针问题,但是找不到那错,大神帮忙看看,谢谢。程序代码:
#include <stdio.h> #include <stdlib.h> #define N 7 typedef struct node{ struct node *left; struct node *right; int date; } BTnode; void Cprintf( int a[]) { //创建根结点 BTnode *root=(BTnode *)malloc(sizeof(BTnode)); BTnode * *Q; //创建队列 Q=(BTnode * *)malloc((N+2)*sizeof(BTnode *)); int rear,front; rear=front=0; BTnode *p; //根结点初始化 root->date=a[0]; root->left=root->right=NULL; Q[rear++]=root; BTnode *pa; int i; pa=root; //其他结点 for(i=1;i<N;i++) { p=(BTnode *)malloc(sizeof(BTnode)); p->date=a[i]; p->left=p->right=NULL; if(!pa->left) pa->left=p; else if(!pa->right) { pa->right=p; pa=Q[front++]; } Q[rear++]=p; }//°´²ã±éÀú while(front>0) { int tag; int k,t,t1; //调整成小根堆 while(1) { tag=1; for(k=front-1;k>-1;k--) { BTnode *pmin; p=Q[k]; p=pmin; if(pmin->date>p->left->date) pmin=p->left; if(p->right&&pmin->date>p->right->date) pmin=p->right; if(p!=pmin) { t=p->date; p->date=pmin->date; pmin->date=t; tag=0; } if(tag) break; } } //交换根结点和最后一个叶子 t1=Q[rear-1]->date; Q[rear-1]->date=root->date; root->date=t1; //移除最后一个叶子 if(Q[front-1]->right) Q[front-1]->right=NULL; else { Q[front-1]->left=NULL; front--; } } } int main() { int a[N]={3,2,5,6,8,9,10}; BTnode *root; Cprintf(a); }