C++のn-aryツリーで指定された値より大きいノードの数
n-aryツリーと数が与えられた場合、与えられた数よりも大きいノードの数を数える必要があります。例を見てみましょう。
入力
tree = [[4], [1, 2], [3, 5]] n = 2
出力
3
nより大きい値を持つノードが3つあります。
アルゴリズム
-
n-aryツリーを初期化します。
-
カウントを0に初期化します。
-
値がnより大きいノードを見つけたら、カウントを1つ増やします。
-
現在のノードの子を取得します。
-
すべての子を繰り返し処理し、同じ関数を再帰的に呼び出してノードをカウントします。
-
カウントを返します。
実装
以下は、C++での上記のアルゴリズムの実装です
#include <bits/stdc++.h> using namespace std; struct Node { int data; vector<Node*> child; }; Node* getNewNode(int data) { Node* temp = new Node; temp->data = data; return temp; } int getGreaterElementsCount(Node* root, int n) { if (root == NULL) return 0; int count = 0; if (root->data > n) { count++; } int nodeChildrenCount = root->child.size(); for (int i = 0; i < nodeChildrenCount; i++) { Node* child = root->child[i]; count += getGreaterElementsCount(child, n); } return count; } int main() { Node* root = getNewNode(1); (root->child).push_back(getNewNode(2)); (root->child).push_back(getNewNode(3)); (root->child).push_back(getNewNode(4)); (root->child[0]->child).push_back(getNewNode(5)); (root->child[0]->child).push_back(getNewNode(5)); (root->child[1]->child).push_back(getNewNode(6)); (root->child[1]->child).push_back(getNewNode(6)); (root->child[1]->child).push_back(getNewNode(7)); (root->child[2]->child).push_back(getNewNode(8)); (root->child[2]->child).push_back(getNewNode(8)); (root->child[2]->child).push_back(getNewNode(9)); int n = 2; cout << getGreaterElementsCount(root, n) << endl; return 0; }
出力
上記のコードを実行すると、次の結果が得られます。
10
-
C++の特定の範囲にあるBSTノードをカウントします
ノードと範囲で構成される二分探索木が与えられます。タスクは、指定された範囲内にあるノードの数を計算し、結果を表示することです。 二分探索木(BST)は、すべてのノードが以下のプロパティに従うツリーです- ノードの左側のサブツリーには、その親ノードのキー以下のキーがあります。 ノードの右側のサブツリーには、その親ノードのキーよりも大きいキーがあります。 したがって、BSTはすべてのサブツリーを2つのセグメントに分割します。左側のサブツリーと右側のサブツリーで、次のように定義できます- left_subtree(キー)≤node(キー)≤right_subtree(キー) 例
-
C++での再帰なしのN-aryツリーのプレオーダートラバーサル
この問題では、N-aryツリーが与えられます。私たちのタスクは、ツリーのプレオーダートラバーサルを印刷することです。 まず、いくつかの基本的な用語を学びましょう。 N-aryツリー は、すべてのノードが最大N個の子ノードを持つことができるツリーです。例2-ary(バイナリ)ツリーには最大2つの子ノードがあります。 プレオーダートラバーサル ツリーのノードをトラバースする方法です。ここでは、最初にルートノードをトラバースし、次に左の子、次に右の子をトラバースします。 私たちの問題を理解するために例を見てみましょう Preorder traversal : 1215149941171