【发布时间】:2019-06-25 02:35:14
【问题描述】:
给定一个大的 n 叉树,我需要创建一个递归函数来打印一个叶子的所有祖先,例如 n 叉树结构为
typedef struct sNaryNode
{
int *data;
int nchild;
struct sNaryNode **child;
} NaryNode;
这是我使用的函数,但给出了错误的答案:
bool printAncestors(NaryNode *root, int *data)
{
int i=0;
if (root == NULL)
return false;
if (root->data == data)
return true;
do
{
auto b=printAncestors(root->child[i], data);
if(b)
{
cout<<*root->data<<" ";
return true;
}
else
i++;
}
while(i<root->nchild);
}
【问题讨论】:
-
如果没有找到孩子,你不会返回任何东西......
-
Offtopic:为什么会有那么多指针?
int* data:你有没有引用一些int e。 G。在一个完全不同的结构中?如果您只需要该值,请删除指针。struct Node** children;: 指针数组???为什么普通数组还不够用? -
您确定要比较 int 指针吗?例如:即使
a和b保持相同的值,int a = 7; Node root = { }; root.data = &a; int b = 7; printAncestors(&root, &b);也不会找到节点... -
@Aconcagua 我用指向节点的数据来实现树
-
使用指向数据的指针可能有意义也可能没有意义,这取决于用例......所以,我经常看到指针在不合适的时候被使用,不过(
struct Node** child至少看起来像一,没有更多信息......)。但是通过比较指针本身,如果您使用节点指向的特定int,您只能找到注释。你确定这是你想要的吗?即使 if 使用指向数据的指针,您也不想按值查找节点,i。 e.bool printAncestors(NaryNode* root, int data) { if(*root->data == data) }?