堆栈排序指针问题
我写了个代码,编译没错,运行错误,应该是指针问题,但是找不到那错,大神帮忙看看,谢谢。
程序代码:#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);
}









~
