决策树查找递归节点C ++

时间:2019-11-14 09:14:17

标签: c++ recursion decision-tree

任务是在决策树节点中找到值。 如果存在则返回该节点,如果不存在则返回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);
            }
        }
    }

}

1 个答案:

答案 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.