在树结构中搜索数据

时间:2018-02-20 09:21:54

标签: c++ algorithm tree

请你推荐在树形结构中搜索数据的有效(快速)算法,如下所示:

document.getElementById("scriptOut").innerHTML = "Hello World";

目标是找到Node.value与搜索模式匹配的所有节点。 谢谢

1 个答案:

答案 0 :(得分:2)

简单的前序遍历:

void match(Node * node, const std::string & value, std::vector<Node*> & result)
{
    if (node->value == value)
    {
        result.push_back(node);
    }
    for (Node * child : node->childs)
    {
        match(child, value, result);
    }
}

int main()
{
    Node * root = /* ... */
    std::string value = /* ... */;
    std::vector<Node*> matches;
    match(root, value, matches);
}

哪些概括

template<typename Action>
void preorder(Node * node, Action action)
{
    action(node);
    for (Node * child : node->childs)
    {
        preorder(child, action);
    }
}

int main()
{
    Node * root = /* ... */
    std::string value = /* ... */;
    std::vector<Node*> matches;
    preorder(root, [&](Node * node){ if (node->value == value) { matches->push_back(node); } });
}