在最后一个左孩子的叶子节点进入函数之后,会继续执行下一行代码 path[pathlen]=bt->data;
。这会导致 path
数组中的元素被覆盖。因此,在递归调用时,需要注意恢复 pathlen
的值。
以下是修改后的代码:
void Path(BTNode* bt, char x, char path[], int pathlen) {
if (bt != NULL) {
if (bt->data == x) {
for (int i = 0; i < pathlen; i++) {
cout << path[i] << " ";
}
cout << bt->data;
return;
} else {
path[pathlen] = bt->data;
pathlen++;
Path(bt->lchild, x, path, pathlen);
// 在左子树递归调用结束后,需要恢复path数组和pathlen值
// 这样才能正确处理右子树
path[pathlen - 1] = '\0';
pathlen--;
Path(bt->rchild, x, path, pathlen);
}
}
}
请注意,我添加了两行代码来恢复 path
数组和 pathlen
值,在处理右子树之前进行了修正。这样就可以正确处理最后一个左孩子的叶子节点了。
内容由零声教学AI助手提供,问题来源于学员提问