请你推荐在树形结构中搜索数据的有效(快速)算法,如下所示:
document.getElementById("scriptOut").innerHTML = "Hello World";
目标是找到Node.value与搜索模式匹配的所有节点。 谢谢
答案 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); } });
}