怎样用链表创建最大堆(不要数组的,急!!!)

来源:百度知道 编辑:UC知道 时间:2024/06/03 12:47:18

#include <stdio.h>
#define N 7
#define SWAP(a,b) {int tmp=a;a=b;b=tmp;}
int A[N]={1,2,3,4,5,6,7};
struct Node
{
int data;
Node* left;
Node* right;
};
Node* create(int n)
{
if(n<N)
{
Node *cur=new Node;
cur->data=A[n];
cur->left=create(2*n+1);
cur->right=create(2*n+2);
return cur;
}
return NULL;
}
void sift(Node* cur)
{
while(cur->left)
{
if(cur->data<cur->left->data
&&(cur->right==NULL||cur->right->data<cur->left->data))
{
SWAP(cur->data,cur->left->data);
cur=cur->left;
}
else if(cur->right!=NULL&&cur->data<cur->right->data
&&cur->left->data<cur->right->data)
{
SWAP(cur->data,cur->right->data);
cur=cur->right;
}
else
return;
}