【发布时间】:2021-11-30 16:31:18
【问题描述】:
我有这个 getTreeLevel 函数,效果很好。
void getTreeLevel(int level, int * size, Node* current, Node** result) {
if (current == NULL) {
return;
}
if (level > 0) {
getTreeLevel(level - 1, size, current->left, result);
getTreeLevel(level - 1, size, current->right, result);
}
if (level == 0) {
cout << "Get Level Tree: Adding node to array " << current->val << endl;
**(result) = *current;
(*size)++;
(*result)++;
}
}
然后我创建另一个函数,以简化主函数的复杂性。
Node** getLevel(int level, int * size) {
Node* emptyNode = new Node;
*size = 0;
getTreeLevel(level, size, root, &emptyNode);
cout << "There are " << *size << " nodes in the level" << endl;
for (int i = 0; i < *size; i++) {
emptyNode--;
cout << emptyNode << " <-> ";
}
cout << endl;
return &emptyNode;
}
当函数在 main 中被调用时:
int* size = new int;
Node ** emptyNode = tree.getLevel(0,size);
while (*size > 0) {
cout << (*emptyNode) << " - ";
(*emptyNode)++;
(*size)--;
}
cout << endl;
输出是:
10 - 5 - 4 - 15 - 14 - 16 -
Get Level Tree: Adding node 4
Get Level Tree: Adding node 14
Get Level Tree: Adding node 16
There are 3 nodes in the level
0000021DE92DC850 <-> 0000021DE92DC830 <-> 0000021DE92DC810 <-> // If I change the cout << (*emptyNode) << " - " for cout << (*emptyNode)->value << " - " then I would get 16 <-> 14 <-> 4 <->
0000021DE92DC810 - 0000000000000023 - 0000000000000023 -
简而言之:这是二叉树的一个片段。 我试图实现一个使用 getTreeLevel 的函数。这个想法主要是降低复杂性。 理论上实现成功。
这里的问题是数组种类在函数之外消失了。 我们创建一个指针,然后将该指针的内存地址作为参数发送到函数中。 完成后,我们向后打印数组(或地址内存,在这种情况下)以返回指向数组开头的指针并返回它。 一旦返回,只有“头”或第一个内存地址保持不变。但是相邻的地址内存好像变了!
您能推荐我什么来解决这个问题? 谢谢
【问题讨论】:
标签: c++ pointers binary-tree