私はこれの論理に問題があります。ツリー全体を検索して (順序検索に頼ることができないため)、一致する値を 1 つだけ返す (存在する場合) にはどうすればよいですか? 再帰呼び出しを返すと、最初のリーフにヒットして一致が見つからないと失敗しませんか?
以下の関数を使用すると、一致が見つかるかツリーの最後に到達するまで呼び出しが行われ、一致に関係なく最も左のノードが返されます。
順番にトラバースする私の再帰関数:
tnode *find(tnode *ptr, const char *str)
{
if (ptr == NULL) return ;
if(strcmp (str,ptr->str) == 0)
return ptr;
else
{
//search left subtree
if (ptr->left != NULL)
find(ptr->left, str) ;
// search right subtree
if (ptr->right != NULL)
find(ptr->right, str) ;
}
return;
}