任务是在决策树节点中找到值。 如果存在则返回该节点,如果不存在则返回null。
我的结构是:
class ValidAnswer
{
public:
string ans;
DecisionTreeNode* son;
....
};
class DecisionTreeNode
{
public:
string value;
bool isLeaf;
list<ValidAnswer*> answersList;
DecisionTreeNode* findNode(string _value);
....
};
我编写了用于查找的递归函数,但是它不起作用。 我找到了使此功能起作用的方法。
这是我的功能:
DecisionTreeNode* DecisionTreeNode::findNode(string _value){
if (value == _value){
return this;
}
if (answersList.size() > 0){
list<ValidAnswer*>::iterator it;
for (it = answersList.begin(); it != answersList.end(); ++it){
if ((*it)->son != nullptr){
return ((*it)->son)->findNode(_value);
}
}
}
}
答案 0 :(得分:1)
if ((*it)->son != nullptr){
return ((*it)->son)->findNode(_value);
这里要注意的一点是,一旦找到有效的son
,就将责任委托给它来得到答案。您看不到与其他son's
回答的可能性。
if ((*it)->son != nullptr)
{
auto GotIt = ((*it)->son)->findNode(_value);
if(GotIt)
return GotIt;
} //If we didn't get an answer from this it, we will check for next son.