BST的每个节点都有一个额外的指针(Say succ)。我有以下函数来填充每个节点 - > succ用它的顺序继承。我只是访问每个节点(inoder序列)并分配inoder后继to node-> succ。它有什么问题?
void populateInorderSucc(node* root,node* tnode)
{if(tnode==NULL)
return;
tnode->succ=inorderSucc(root,tnode); //Seg-fault here
populateInorderSucc(root,root->left);
populateInorderSucc(root,root->right);
}
我在main函数中将其称为populateInorderSucc(root,root); inorderSucc(root,tnode)函数工作正常。我已经从另一篇帖子find inorder successor in BST without using any extra space验证了它。由于递归调用而发生了seg-fault,如果我对它们进行评论,那么就没有错误
node* inorderSucc(node* root,node* tnode)
{
if(tnode->right!=NULL)
return minvalue(tnode->right);
else{ node* succ;
while(root!=NULL)
{if(root->val>tnode->val)
{succ=root;
root=root->left;
}
else
{ if(root->val<tnode->val)
root=root->right;
else
break;
}
}
return succ;
}
}