繁体   English   中英

C++ - 在树的递归中返回

[英]C++ - Return in Recursion of Tree

class Person {
private:
    char* name;
    int numChildren;
    Person** childrenList;
public:
    Person(char* name);
    ~Person();
    // member functions
        // ...
};

假设我通过以下代码创建了一个PersonPerson* 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

你需要:

  1. return递归调用的结果,如果成功
  2. 如果找不到此人,则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成员函数似乎有点奇怪。 此外, numChildrenname是成员变量,而不是函数。

不应该是:

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::vectorstd::string而不是数组和 char 指针?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM