我是一名计算机科学学院的学生。昨天,我有一个关于使用 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;
}
我注意到代码是错误的。如果函数进入第一个或第二个 if 块,它不会执行任何 return 语句。
但是当实验室助手运行代码时,它工作得很好。
我想也许这种行为是特定于编译器的。但是当我在 gcc 上尝试该代码时,该功能也可以正常工作。(我们大学使用microsoft visual c++编译器)
谁能解释发生了什么?为什么这段代码有效?
PS:忽略节点为空、找不到值等其他错误。