C++で指定された範囲のBSTキーを出力します
この問題では、二分探索木の2つのノードが与えられます。そして、ツリーで発生するk1からk2の範囲のすべての値を出力する必要があります。つまり、k1より大きくk2より小さいすべての値を出力する必要があります。そして、これらすべてのキーを値の昇順で印刷する必要があります。
二分探索木 これらの3つのプロパティに従うツリーです-
-
左側のサブツリーには、ノードの値よりも小さい値のノードがあります。
-
右側のサブツリーには、ノードの値よりも大きい値のノードがあります。
-
取得されるサブツリーも二分探索木である必要があります。ツリーに重複ノードを含めることはできません。
例 、
Input : k1 = 12 and k2 = 25. Output : 15, 20, 24
ツリー -
説明 −ツリーをトラバースすると、すべての要素がトラバースされ、12〜25の範囲にある要素が出力されます。つまり、ノードxの場合、12≤x≥25が出力されます。
ここでは、BSTのプロパティを使用してソリューションを見つけます。つまり、左側のサブツリーのすべての要素はルートよりも小さく、右側のサブツリーのすべての要素はルートノードよりも大きくなっています。そして、この問題を解決するためにBSTをトラバースするために使用します。それでは、この問題を解決するためのアルゴリズムを作成しましょう。
アルゴリズム
Step 1 : Compare the root node with the k1 and k2. Step 2 : If root is greater than k1. Call left subtree for the search recursively. Step 3 : If root is smaller than k2. Call right subtree for the search recursively. Step 4 : If the root of the tree is in the range. Then print the root’s value.
では、このアルゴリズムに基づいて、問題を解決するためのプログラムを作成しましょう。
#include<bits/stdc++.h>
using namespace std;
class node{
public:
int data;
node *left;
node *right;
};
void nodesInRange(node *root, int k1, int k2){
if ( NULL == root )
return;
if ( k1 < root->data )
nodesInRange(root->left, k1, k2);
if ( k1 <= root->data && k2 >= root->data )
cout<<root->data<<"\t";
if ( k2 > root->data )
nodesInRange(root->right, k1, k2);
}
node* insert(int data){
node *temp = new node();
temp->data = data;
temp->left = NULL;
temp->right = NULL;
return temp;
}
int main(){
node *root = new node();
int k1 = 12, k2 = 25;
root = insert(20);
root->left = insert(10);
root->right = insert(24);
root->left->left = insert(8);
root->left->right = insert(15);
root->right->right = insert(32);
cout<<”The values of node within the range are\t”;
nodesInRange(root, k1, k2);
return 0;
} The values of node within the range are 15 20 24.
-
C++でBSTのノードを削除する
二分探索木があるとします。 1つのキーkを取得し、指定されたキーkをBSTから削除して、更新されたBSTを返す必要があります。したがって、ツリーが次のような場合- そして、キーk =3の場合、出力ツリーは-になります。 これを解決するには、次の手順に従います- ルートノードを削除するためにdeleteRoot()というメソッドを定義します。これは次のように機能します ルートがnullの場合、nullを返します ルートに右のサブツリーがない場合は、ルートの左に戻ります x:=ルートの後継者 xの左側を左に設定:=ルートの左側 ルート
-
C++で特定のノードから距離kにあるすべてのノードを出力します
この問題では、二分木、ターゲットノード、整数Kが与えられます。ターゲットノードから距離Kにあるツリーのすべてのノードを印刷する必要があります。 。 二分木 は、各ノードに最大2つのノード(1つまたは2つ/なし)を持つ特別なツリーです。 問題を理解するために例を見てみましょう K =2 ターゲットノード:9 出力 − 5 1 3. 説明 − 距離は、ノードの上位、下位、または同じレベルで取得できます。したがって、それに応じてノードを返します。 この問題を解決するには、ターゲットノードからK距離離れたノードのタイプを理解する必要があります。 上記の試験から、k個の離