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