私はコンピュータサイエンスの大学生です。昨日、C++を使用した二分探索木についてのクラスがあります。私たちはそのクラスのラボアシスタントによって教えられています。
ツリー内のノードを次のような構造体として定義します。
struct Data{
char name[15];
int age;
Data *left,*right;
};
そして、次のようにBST内を検索するためのコードを提供します。
// temp is current node, name is the value of the node to be searched for.
Data* search(Data *temp,char name[]) {
if(strcmp(temp->name,name)>0)
search(temp->left,name);
else if(strcmp(temp->name,name)<0)
search(temp->right,name);
else
return temp;
}
コードが間違っていることに気づきました。関数が最初または2番目のifブロックに入ると、returnステートメントは実行されません。
ただし、ラボアシスタントがコードを実行すると、正常に機能します。
多分この振る舞いはコンパイラ特有だと思いました。しかし、gccでそのコードを試したところ、関数も正常に機能します。(私たちの大学はMicrosoft Visual C ++コンパイラを使用しています)
誰かが何が起こっているのか説明できますか?このコードが機能しているのはなぜですか?
PS:ノードが空の場合、値が見つからない場合など、他のエラーは無視してください。