sách gpt4 ai đã đi

c - 树:使用队列进行层序遍历

In lại 作者:行者123 更新时间:2023-11-30 17:05:10 28 4
mua khóa gpt4 Nike

我编写了使用队列遍历树的代码,但是下面的出队函数生成错误,head = p->next 是否有问题?我不明白为什么这部分是错误的。

void Levelorder(void) {
node *tmp, *p;


if (root == NULL) return;

tmp = root;
printf("The level order is :\n");

while (tmp != NULL) {

printf("%d, ", tmp->data);
if (tmp->left) {
enqueue(tmp->left);
}
if (tmp->right) {
enqueue(tmp->right);
}
tmp = dequeue();
}

return;
}

void enqueue(node *p) {
if (head == NULL) {
head = p;
}
else {
tail->next = p;
}
tail = p;
p->next = NULL;
tail->next = NULL;

return;
}

node* dequeue(void) {
node *p;
p = head;
head = p->next;


if (head == NULL) {
tail == NULL;
}

return p;
}

1 Câu trả lời

while 循环的条件是:

while (tmp != NULL) {

因此,只有当 dequeue trở lại VÔ GIÁ TRỊ 时,它才会终止:

    tmp = dequeue();

但是,当查看出队的实现时,这不会发生:

node* dequeue(void) {
node *p;
p = head;

这里,P 被取消引用:

    head = p->next;

if (head == NULL) {
tail == NULL;
}

这里返回了P:

    return p;
}

要返回 VÔ GIÁ TRỊ 指针并离开 while 循环,P 此处必须为 VÔ GIÁ TRỊ。但是,VÔ GIÁ TRỊ 指针将在之前使用 head = p->next; 取消引用,这将导致段错误(就 C 语言而言,UB) .

您应该在出队函数的开头检查 cái đầu 是否为 NULL 指针,并在这种情况下返回 NULL:

node* dequeue(void) {
node *p;
if (!head)
return NULL;

...

关于c - 树:使用队列进行层序遍历,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35420750/

28 4 0
行者123
Hồ sơ cá nhân

Tôi là một lập trình viên xuất sắc, rất giỏi!

Nhận phiếu giảm giá Didi Taxi miễn phí
Mã giảm giá Didi Taxi
Giấy chứng nhận ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com