C ++
 Computer >> コンピューター >  >> プログラミング >> C ++

C ++を使用して、N-aryツリー内の特定のノードの兄弟の数を検索します


この記事では、n-aryツリー内の特定のノードの兄弟の数を決定するための完全な情報を提供します。ユーザーが指定したkeyの値でノードの兄弟を見つける必要があります。そうでない場合は、-1として出力します。使用できるアプローチは1つだけです-

シンプルなアプローチ

このアプローチでは、すべてのノードを調べて、子がユーザーと同じ値を持っているかどうかを確認します。存在する場合は、1(指定された値)の子の数に答えます。

#include <bits/stdc++.h>
using namespace std;
class Node {  // structure of nodes of our tree.
public:
    int key;
    vector<Node*> child;
    Node(int data){
        key = data;
    }
};
int main(){
   //     Building The Tree
    Node* Base = new Node(50);
    (Base->child).push_back(new Node(2));
    (Base->child).push_back(new Node(30));
    (Base->child).push_back(new Node(14));
    (Base->child).push_back(new Node(60));
    (Base->child[0]->child).push_back(new Node(15));
    (Base->child[0]->child).push_back(new Node(25));
    (Base->child[0]->child[1]->child).push_back(new Node(70));
    (Base->child[0]->child[1]->child).push_back(new Node(100));
    (Base->child[1]->child).push_back(new Node(6));
    (Base->child[1]->child).push_back(new Node(1));
    (Base->child[2]->child).push_back(new Node(7));
    (Base->child[2]->child[0]->child).push_back(new Node(17));
    (Base->child[2]->child[0]->child).push_back(new Node(99));
    (Base->child[2]->child[0]->child).push_back(new Node(27));
    (Base->child[3]->child).push_back(new Node(16));
    int x = 30;
    queue<Node*> q;
    q.push(Base);
    bool flag = 0;
    int answer = -1;
    if(Base -> key != x){
        while(!q.empty()){
            auto parent = q.front();
            q.pop();
            for(int i = 0; i < parent -> child.size(); i++){
                if(parent -> child[i] -> key == x){
                    answer = parent -> child.size() - 1;
                    flag = 1;
                    break;
                }
                q.push(parent -> child[i]);
            }
            if(flag)
                break;
        }
        cout << answer << "\n";
    }
    else
        cout << "0\n";
    return 0;
}

出力

3

上記プログラムの説明

このプログラムでは、訪問されていないノードを内部に持つキューを維持し、訪問されたノードがポップされます。ここで、ノードを探索するとき、その子を探索します。子の値がxと一致すると、フラグがトリガーされ、回答変数にchild.size()-1の値が割り当てられます。次に、forループを突破し、フラグがトリガーされているかどうかを確認します。トリガーされると、whileループから抜け出します。その後、指定された値のノードが存在しない場合は、回答を出力します。そのため、回答変数は変更されず、出力は-1になります。ルート値が指定された値と同じである場合、それをチェックしてプログラムを実行するifステートメントがあります。

結論

この記事では、問題を解決して、n-aryツリー内の特定のノードの兄弟の数を見つけます。 O(N)時間計算量。また、この問題のC ++プログラムと、この問題を解決するための完全なアプローチについても学びました。同じプログラムをC、Java、Python、その他の言語などの他の言語で作成できます。


  1. C ++を使用して、指定されたポイントから可能な四辺形の数を見つけます

    四辺形は、ユークリッド平面幾何学で4つの頂点と4つのエッジを持つポリゴンを形成します。名前4-gonなど。四辺形の他の名前に含まれ、正方形、表示スタイルなどとしても知られています。 この記事では、与えられた点から可能な四辺形の数を見つけるためのアプローチを説明します。この問題では、デカルト平面に提供された4つの点(x、y)を使用して作成できる四辺形の数を調べる必要があります。だからここに与えられた問題の例があります- Input : A( -2, 8 ), B( -2, 0 ), C( 6, -1 ), D( 0, 8 ) Output : 1 Explanation : One quadr

  2. C++のバイナリツリーで特定のノードのミラーを検索します

    この問題では、二分木が与えられます。私たちのタスクは、バイナリツリーで特定のノードのミラーを見つけることです。ノードが与えられ、反対側のサブツリーでそのノードの鏡像を見つけます。 問題を理解するために例を見てみましょう 入力 出力 mirror of B is E. ソリューションアプローチ この問題を解決する簡単な解決策の1つは、左のサブツリーと右のサブツリーに2つのポインターを使用して、ルートからの再帰を使用することです。次に、ターゲット値について、ミラーが見つかった場合はミラーを返し、それ以外の場合は他のノードを繰り返します。 ソリューションの動作を説明するプログラム 例