【发布时间】:2021-07-14 16:53:07
【问题描述】:
我正在尝试解决 GFG 上的问题Populate Inorder Successor for all nodes in a BST。 给出了一些代码(无法粘贴到这里,因为这里显示了很多代码)
我需要对populateNext(node* p) 进行编码,其中 p 是树的根节点。
我对函数进行了如下编码,但它不工作并且输出为3->-1 而不是3->8 8->10 10->12 12->-1
void populateNext(struct node* p)
{
static node* x=NULL;
if(p==NULL) return;
populateNext(p->right);
p->next=x;
x=p;\
populateNext(p->left);
}
我认为创建的x 节点永远不会被修改,因此主函数ptr 中的指针不会向前移动。然后我寻找更多的解决方案,并找到了一个类似的带有双指针的解决方案。我不知道为什么我的不工作,但下面的工作。
void find(struct node* root,struct node **nextr)
{
if(root)
{
find(root->right,nextr);
root->next = *nextr;
*nextr = root;
find(root->left,nextr);
}
}
void populateNext(struct node* p)
{
struct node* next = NULL;
find(p,&next);
}
我知道指针 x 正在存储结构变量的地址,并且每次调用函数时,我都会为我的指针分配一个新的节点指针,因此它应该可以工作。我尝试将节点 x 也声明为全局但仍然是相同的答案 3->-1。
我尝试搜索指向结构指针的指针,但到处都只给出了如何做到这一点。我想问为什么代码不适用于单指针,为什么它适用于指针指针以及指针指针的用途,即我们为什么使用 is?单指针有什么限制?
【问题讨论】: