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

加重文字列にC++の母音が含まれているツリーのノードをカウントします


ノードの重みを文字列として持つ二分木が与えられます。目標は、文字列に母音が含まれるような重みを持つノードの数を見つけることです。重みが「aer」の場合、母音「a」と「e」があるため、ノードがカウントされます。

入力

値を入力した後に作成されるツリーを以下に示します-

加重文字列にC++の母音が含まれているツリーのノードをカウントします

出力

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 はい

入力

値を入力した後に作成されるツリーを以下に示します-

加重文字列にC++の母音が含まれているツリーのノードをカウントします

出力

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

  1. 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(ルートの左側)

  2. 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のノードが出力されます。