こんにちは、二分探索木で再帰コードを練習しているところです。セグ フォールトが発生していますが、問題がどこにあるのかわかりません (おそらく何かばかげたことに直面しているのでしょう)。ノード数のカウントやツリーの高さのカウントなど、正常に機能している他の関数があります。特にこの機能は私に問題を引き起こしています。私はc ++でコーディングしています。
//wrapper function
int table::in_order_successor()
{
node * temp;
temp = root;
in_order_successor(root, temp);
}
//Find the in-order successor
int table::in_order_successor(node * root, node * temp)
{
if(root == NULL) return 0;
if(root->right != NULL)
if(root->data == temp->data)
in_order_successor(root, temp->right);
in_order_successor(root, temp->left);
return temp->data;
}
私が持っていたアイデアは、関数をルートから一度右に移動させ、次に可能な限り左に続けることでした。root->data が temp->data (データはランダムに生成された int にすぎない) と等しい場合にのみ、正しく実行したいと考えています。