C++ 递归函数中的奇异返回行为
我有这样一个树节点类:C++ 递归函数中的奇异返回行为,c++,recursion,tree,C++,Recursion,Tree,我有这样一个树节点类: class Node { public: Node(); Node(char _value); ~Node(); char getValue() const; Node* getParent() const; void addChild(Node* _child); bool isLeaf() const; bool isRoot() const; bool hasChild(char _value
class Node
{
public:
Node();
Node(char _value);
~Node();
char getValue() const;
Node* getParent() const;
void addChild(Node* _child);
bool isLeaf() const;
bool isRoot() const;
bool hasChild(char _value) const;
private:
vector<Node*> children;
char value;
Node* parent;
};
但是,当我运行这段代码时,tmp变量总是false。如果我使用调试器跟踪它,则返回true;部分执行,但递归继续。有什么建议吗
Node* root = new Node();
Node* a = new Node('a');
Node* c = new Node('c');
root->addChild(a);
root->addChild(c);
bool tmp = root->hasChild('a');
您的问题在于hasChild的自我称呼方式:
(*it)->hasChild(_value);
您调用它,但不使用返回值执行任何操作。您可能希望尝试返回结果
因为您的算法似乎指示一个未排序的树,所以这不像在语句前面加上return那样简单。您可能需要检查true并返回它,但false表示继续查找:
if ((*it)->hasChild(_value))
return true;
您还需要在函数末尾返回false。您的hasChild代码有两个主要缺陷,它永远无法返回false,并且您在以下行调用hasChild的返回值永远不会被使用:
(*it)->hasChild(_value);
这将解决您的问题,包括代码其余部分的任何问题非常感谢,现在我看到了解决方案,非常简单。对于将来偶然发现这个问题的任何人来说,下面是代码的工作原理:我希望任何好的编译器都会发出警告,警告到达非void函数的末尾,而不会在问题的末尾发出任何返回信号。检查你的电脑是否有。
(*it)->hasChild(_value);