📜  在非二叉树中生成 DFS 搜索以在 c++ stl 中查找任何节点的值代码 - C++ (1)

📅  最后修改于: 2023-12-03 15:08:06.715000             🧑  作者: Mango

在非二叉树中生成 DFS 搜索以在 C++ STL 中查找任何节点的值

简介

在非二叉树中使用 DFS(深度优先搜索)算法,在 C++ STL 中查找任何节点的值,是一个常见的编程问题。本文将说明如何编写这样的代码。

DFS算法

DFS(深度优先搜索)算法是一种常见的搜索算法,常用于图形遍历和树遍历等场景。它以深度(优先级)优先遍历树或图形的数据结构,沿着树的分支向下进入,直到没有未访问的节点为止。然后返回到树的另一个子树进行搜索,并且重复此过程,直到遍历整个树或图形。

DFS算法的实现可以使用递归或非递归方法。下面是一个递归实现的例子:

void DFS(Node* node) {
    if (!node) return;
    cout << node->value << endl;
    for (Node* child : node->children) {
        DFS(child);
    }
}

以上代码用于遍历一颗树,从根节点开始,首先输出当前节点的值,然后递归地访问其子节点。

使用STL在树中查找节点的值

在非二叉树中查找节点的值,可以使用遍历算法实现。如果我们将所有节点的值储存在一个 STL 容器中,我们可以轻松地使用 STL find 函数实现此目的。

例如,如果我们有一个名为 nodes 的 vector 存储了所有节点的值,我们可以使用以下代码:

int target_value = 42;
auto it = find(nodes.begin(), nodes.end(), target_value);
if (it != nodes.end()) {
    // target_value found in nodes vector
} else {
    // target_value not found in nodes vector
}

以上代码将查找值为 42 的节点是否在 nodes 容器中存储。

完整示例代码

下面是一个完整的示例代码,演示如何使用 DFS 和 STL 函数在非二叉树中查找节点:

#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

struct Node {
    int value;
    vector<Node*> children;
};

void DFS(Node* node, vector<int>& nodes) {
    if (!node) return;
    nodes.push_back(node->value);
    for (Node* child : node->children) {
        DFS(child, nodes);
    }
}

int main() {
    // Create the tree
    Node* root = new Node{1};
    Node* node2 = new Node{2};
    Node* node3 = new Node{3};
    Node* node4 = new Node{4};
    Node* node5 = new Node{5};
    Node* node6 = new Node{6};
    Node* node7 = new Node{7};
    Node* node8 = new Node{8};
    root->children = {node2, node3, node4};
    node2->children = {node5, node6};
    node3->children = {node7};
    node4->children = {node8};

    // Traverse the tree using DFS
    vector<int> nodes;
    DFS(root, nodes);

    // Search for the value 7
    int target_value = 7;
    auto it = find(nodes.begin(), nodes.end(), target_value);
    if (it != nodes.end()) {
        cout << "Found value " << target_value << endl;
    } else {
        cout << "Unable to find value " << target_value << endl;
    }

    // Free the memory
    delete root;
    delete node2;
    delete node3;
    delete node4;
    delete node5;
    delete node6;
    delete node7;
    delete node8;

    return 0;
}

在上面的示例代码中,首先创建了一个非二叉树,然后使用 DFS 遍历该树,找到并输出值为 7 的节点。最终,释放动态内存,避免内存泄漏。

结论

在非二叉树中使用 DFS 算法,并结合 STL 函数在其中查找节点的值,是一项十分有用的编程技能。希望这篇文章能够帮助大家掌握这项技能。