修复heap_printf队列溢出问题

This commit is contained in:
Jdhggg 2025-05-23 18:54:44 +08:00
parent 1aafe0a833
commit b124a1b3f3

69
heap.c
View File

@ -58,46 +58,37 @@ void heap_push(heap *tree,int val)
void heap_print(heap* tree,int root)
{
int queue[3] = {0};
int font = root;
int rear = font+1;
int flog = 1;
printf("[%d]\n",tree->data[root]);
while (flog < tree->size)
if (tree->size <= 0) return;
int* queue = (int*)malloc(tree->size * sizeof(int));
int front = 0;
int rear = 1;
int count = 1;
queue[0] = root;
printf("[%d]\n", tree->data[root]);
while (front < rear && count < tree->size)
{
int flog_r = 0,flog_l = 0;
for (int i = 0;i<2;i++)
{
switch (i)
{
case 0:
flog_l= heap_get_left(tree,queue[font]);
if (flog_l > tree->size)
{
continue;
}
queue[rear] = flog_l;
rear = (rear+1) % 3;
printf("[%d]",tree->data[flog_l]);
flog++;
break;
case 1:
flog_r = heap_get_right(tree,queue[font]);
if (flog_r > tree->size)
{
continue;
}
queue[rear] = flog_r;
rear = (rear+1) % 3;
printf("[%d]",tree->data[flog_r]);
flog++;
break;
default:
break;
}
}
printf("\n");
font = (font+1) % 3;
int level_size = rear - front;
for (int i = 0; i < level_size && count < tree->size; i++)
{
int current = queue[front++];
int left = heap_get_left(tree, current);
int right = heap_get_right(tree, current);
if (left < tree->size) {
printf("[%d]", tree->data[left]);
queue[rear++] = left;
count++;
}
if (right < tree->size) {
printf("[%d]", tree->data[right]);
queue[rear++] = right;
count++;
}
}
printf("\n");
}
free(queue);
}