[英]C++ - Return in Recursion of Tree
class Person {
private:
char* name;
int numChildren;
Person** childrenList;
public:
Person(char* name);
~Person();
// member functions
// ...
};
假设我通过以下代码创建了一个
Person
:Person* me = new Person("Alex");
,Alex
的后代对象也将被创建。 对于特定实例,结构将如下所示:
我想实现一个函数const Person* Person::findPerson(const Person* thisPerson, const char* target_name) const;
,搜索所有Person
以找到name
等于target_name
那个。
这是我的代码:
const Person* Person::findPerson(const Person* thisPerson, const char* target_name) const {
if (strcmp(thisPerson->name(), target_name) == 0)
return thisPerson;
for (int i = 0; i < thisPerson->numChildren(); i++)
findPerson(thisPerson->childrenList[i], target_name);
}
我认为代码可以工作,但编译器认为它可能不返回任何内容并且不让我编译它。 而且,如果找不到人,我不知道如何返回nullptr
。
你需要:
return
递归调用的结果,如果成功return nullptr
const Person* Person::findPerson(const Person* thisPerson, const char* target_name) const {
if (strcmp(thisPerson->name(), target_name) == 0)
return thisPerson;
for (int i = 0; i < thisPerson->numChildren(); i++) {
const Person *p = findPerson(thisPerson->childrenList[i], target_name);
// Found in child tree? Return it (terminate recursion)
if (p) return p;
}
// Not found in this branch of the tree
return nullptr;
}
尽管将Person
指针传递给Person
成员函数似乎有点奇怪。 此外, numChildren
和name
是成员变量,而不是函数。
不应该是:
const Person* Person::findPerson(const char* target_name) const {
if (strcmp(name, target_name) == 0)
return this;
for (int i = 0; i < numChildren; i++) {
const Person *p = childrenList[i]->findPerson(target_name);
// Found in child tree? Return it (terminate recursion)
if (p) return p;
}
// Not found in this branch of the tree
return nullptr;
}
而且,我不得不问你为什么不使用std::vector
和std::string
而不是数组和 char 指针?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.