int Path(BTree* b, BTree* s) { BTree* p; int i, top = -1; bool flag; do { while (b) { top++; St[top] = b; b = b->lchild; } p = NULL; flag = true; while (top != -1 && flag) { b = St[top]; if (b->rchild == p) { if (b == s) { printf("\n >>所有祖先:\n"); for (i = 0; i < top; i++) printf("%s ", St[i]->name); printf("\n"); return 1; } else { top--; p = b; } } else { b = b->rchild; flag = false; } } } while (top != -1); return 0; }改错
时间: 2024-02-10 19:14:42 浏览: 65
这段代码有一个错误,`St` 数组没有被定义。我猜测 `St` 是一个存储指针的栈,所以应该在函数开始处定义 `St` 数组。此外,由于 `St` 数组的大小不确定,应该使用动态内存分配来分配它的空间,避免数组越界的问题。
修正后的代码如下:
```
int Path(BTree* b, BTree* s) {
BTree* p;
int i, top = -1;
bool flag;
BTree** St = (BTree**)malloc(sizeof(BTree*) * MAX_SIZE); // 动态分配空间
do {
while (b) {
top++;
St[top] = b;
b = b->lchild;
}
p = NULL;
flag = true;
while (top != -1 && flag) {
b = St[top];
if (b->rchild == p) {
if (b == s) {
printf("\n >>所有祖先:\n");
for (i = 0; i < top; i++)
printf("%s ", St[i]->name);
printf("\n");
return 1;
}
else {
top--;
p = b;
}
}
else {
b = b->rchild;
flag = false;
}
}
} while (top != -1);
free(St); // 释放动态分配的空间
return 0;
}
```
阅读全文