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つのポインターを使用して、ルートからの再帰を使用することです。次に、ターゲット値について、ミラーが見つかった場合はミラーを返し、それ以外の場合は他のノードを繰り返します。 ソリューションの動作を説明するプログラム 例