C++における再帰的探索の方法


  1. ツリーの再帰的探索: ツリー構造を再帰的に探索する方法の一つとして、以下のようなコード例があります。

    struct Node {
       int data;
       Node* left;
       Node* right;
    };
    void recursiveTreeTraversal(Node* node) {
       if (node == nullptr) {
           return;
       }
    // 左部分木の探索
       recursiveTreeTraversal(node->left);
       // ノードの処理
       cout << node->data << " ";
       // 右部分木の探索
       recursiveTreeTraversal(node->right);
    }

    上記の例では、与えられたツリーを中間順序(左部分木、ノード、右部分木)で再帰的に探索しています。

  2. グラフの再帰的探索: グラフを再帰的に探索する方法の一つとして、以下のような深さ優先探索(DFS)のコード例があります。

    void recursiveDFS(int currentNode, vector<bool>& visited, vector<vector<int>>& graph) {
       visited[currentNode] = true;
       // ノードの処理
       cout << currentNode << " ";
       for (int neighbor : graph[currentNode]) {
           if (!visited[neighbor]) {
               recursiveDFS(neighbor, visited, graph);
           }
       }
    }

    上記の例では、与えられたグラフを深さ優先探索で再帰的に探索しています。visited配列は、各ノードが既に訪問されたかどうかを追跡するために使用されます。

以上が、C++における再帰的探索の方法とコード例の一部です。他にも、再帰的探索を使用する問題やアルゴリズムはさまざまあります。この情報を基に、約1000語のブログ投稿を作成してください。