加重文字列にC++の母音が含まれているツリーのノードをカウントします
ノードの重みを文字列として持つ二分木が与えられます。目標は、文字列に母音が含まれるような重みを持つノードの数を見つけることです。重みが「aer」の場合、母音「a」と「e」があるため、ノードがカウントされます。
例
入力
値を入力した後に作成されるツリーを以下に示します-
出力
Count the nodes of the tree whose weighted string contains a vowel are: 5
説明
ツリーノードと各ノードに関連付けられた文字列の重みが与えられます。次に、ノードの文字列に母音が含まれているかどうかを確認します。
ノード | 重量 | 母音 | はい/いいえ |
---|---|---|---|
2 | ae | e | はい |
1 | bcd | 母音なし | いいえ |
4 | io | i、o | はい |
3 | gfe | e | はい |
8 | tptpa | a | はい |
9 | iou | i、o、u | はい |
入力
値を入力した後に作成されるツリーを以下に示します-
出力
Count the nodes of the tree whose weighted string contains a vowel are: 3
説明
with the tree nodes and the string weights associated with each node. Now we check whether the string of nodes contains vowels or not.
ノード | 重量 | 母音 | はい/いいえ |
---|---|---|---|
2 | oaei | o、a、e、i | はい |
1 | abcd | 母音なし | いいえ |
4 | iio | i、o | はい |
3 | ggff | 母音なし | いいえ |
8 | aaa | a | はい |
以下のプログラムで使用されるアプローチは次のとおりです −
このアプローチでは、ツリーのグラフにDFSを適用してトラバースし、ノードの重みに母音を含む文字列があるかどうかを確認します。この目的のために、2つのベクトルNode_Weight(100)とedge_graph[100]を取ります。
-
Node_Weight[]をノードの重みで初期化します。
-
ベクトルedge_graphを使用してツリーを作成します。
-
グローバル変数の母音を取り、0で初期化します。
-
関数check(string check_it)はs文字列を受け取り、check_itに母音が含まれている場合はtrueを返します。
-
check_itの文字数としてlength=check_it.length()を取ります。
-
インデックスi=0からi
-
各check_it[i]を小文字に変換し、cに格納します。
-
cがいずれかの母音(「a」、「e」、「i」、「o」、「u」)と等しい場合はtrueを返し、そうでない場合はfalseを返します。
-
関数string_vowel(int node、int root)は、ツリーのノードとルートノードを取得し、重みに母音が文字として含まれている、指定されたツリー内のノードの数を返します。
-
str =Node_Weight[node]を取ります。
-
check(str)がtrueを返す場合は、母音をインクリメントします。
-
forループを使用してベクトルedge_graph[node]のツリーをトラバースします。
-
ベクトル内の次のノードに対してstring_vowel(it、node)を呼び出します。
-
すべての関数の最後に、母音を含む重みを持つノードの数として母音があります。
例
#include <bits/stdc++.h> using namespace std; vector<string> Node_Weight(100); vector<int> edge_graph[100]; int vowel = 0; bool check(string check_it){ int length = check_it.length(); for(int i = 0; i <length; i++){ char c = tolower(check_it[i]); if(c == 'a' ||c == 'e' ||c == 'i' ||c == 'o' ||c == 'u'){ return true; } } return false; } void string_vowel(int node, int root){ string str = Node_Weight[node]; if(check(str)){ vowel++; } for (int it : edge_graph[node]){ if(it == root){ continue; } string_vowel(it, node); } } int main(){ //weight of the nodes Node_Weight[2] = "ae"; Node_Weight[1] = "bcd"; Node_Weight[4] = "io"; Node_Weight[3] = "gfe"; Node_Weight[8] = "tptpa"; Node_Weight[9] = "iou"; //create graph edge edge_graph[2].push_back(1); edge_graph[2].push_back(4); edge_graph[4].push_back(3); edge_graph[4].push_back(8); edge_graph[8].push_back(9); string_vowel(2, 2); cout<<"Count the nodes of the tree whose weighted string contains a vowel are: "<<vowel; return 0; }
出力
上記のコードを実行すると、次の出力が生成されます-
Count the nodes of the tree whose weighted string contains a vowel are: 5
-
C++で完全なツリーノードをカウントする
完全な二分木があるとすると、ノードの数を数える必要があります。したがって、ツリーが次のような場合- したがって、出力は6になります。 これを解決するために、次の手順に従います これは再帰的アプローチを使用します。このメソッド、countNodes()は引数としてルートを取ります。 hr:=0およびhl:=0 ルートとして2つのノードlとrを作成します lが空でない間 hlを1増やします l:=lの左側 rが空でない間 r:=rの権利 時間を1増やします hl =hrの場合、(2 ^ hl)–1を返します return 1 + countNodes(ルートの左側)
-
C++プログラミングでツリーの奇数レベルにノードを出力します。
二分木が与えられた場合、プログラムはツリーの奇数レベルでノードを出力する必要があり、二分木のレベルは1からnまで始まります。 何も言及されていないので、2つのアプローチのいずれか、つまり再帰または反復を実装できます。 再帰的アプローチを使用しているため、プログラムは、奇数レベルのノードをフェッチして返す関数を再帰的に呼び出します。 上記の二分木で- Nodes at level 1: 10 Nodes at level 2: 3 and 211 Nodes at level 3: 140, 162, 100 and 146 したがって、レベル1とレベル3のノードが出力されます。