TwoSumIV-入力はC++のBSTです
二分探索木と1つのターゲット値があるとします。合計が指定されたターゲットと等しくなるように、BSTに2つの要素が存在するかどうかを確認する必要があります。
したがって、入力が次のような場合
その場合、出力はTrueになります。
これを解決するには、次の手順に従います-
-
配列を定義するv
-
関数inorder()を定義します。これはルートになります
-
ルートがnullの場合、-
-
戻る
-
-
順序なし(ルートの左側)
-
ルートの値をvに挿入
-
順序なし(ルートの左側)
-
関数findnode()を定義します。これにはkがかかります
-
n:=vのサイズ
-
i
-
t:=v [i] + v [j]
-
tがkと同じ場合、-
-
trueを返す
-
-
t
-
(iを1増やします)
-
-
それ以外の場合
-
(jを1つ減らします)
-
-
-
falseを返す
-
メインの方法から、次のようにします-
-
inorder(root)
-
配列を並べ替えるv
-
findnode(k)を返す
例
理解を深めるために、次の実装を見てみましょう-
#include <bits/stdc++.h>
using namespace std;
class TreeNode{
public:
int val;
TreeNode *left, *right;
TreeNode(int data){
val = data;
left = NULL;
right = NULL;
}
};
void insert(TreeNode **root, int val){
queue<TreeNode*> q;
q.push(*root);
while(q.size()){
TreeNode *temp = q.front();
q.pop();
if(!temp->left){
if(val != NULL)
temp->left = new TreeNode(val);
else
temp->left = new TreeNode(0);
return;
}
else{
q.push(temp->left);
}
if(!temp->right){
if(val != NULL)
temp->right = new TreeNode(val);
else
temp->right = new TreeNode(0);
return;
}
else{
q.push(temp->right);
}
}
}
TreeNode *make_tree(vector<int> v){
TreeNode *root = new TreeNode(v[0]);
for(int i = 1; i<v.size(); i++){
insert(&root, v[i]);
}
return root;
}
class Solution {
public:
vector<int> v;
void inorder(TreeNode* root){
if (root == NULL || root->val == 0)
return;
inorder(root->left);
v.push_back(root->val);
inorder(root->right);
}
bool findnode(int k){
int n = v.size(), i = 0, j = n - 1;
while (i < j) {
int t = v[i] + v[j];
if (t == k)
return true;
if (t < k)
i++;
else
j--;
}
return false;
}
bool findTarget(TreeNode* root, int k){
inorder(root);
sort(v.begin(), v.end());
return findnode(k);
}
};
main(){
Solution ob;
vector<int> v = {5,3,6,2,4,NULL,7};
TreeNode *root = make_tree(v);
cout << (ob.findTarget(root, 9));
} 入力
{5,3,6,2,4,NULL,7},9 出力
1
-
C++のBSTの2つのノード間の最大要素
問題の説明 N個の要素の配列と、指定された配列に属する2つの整数A、Bが与えられます。 arr[0]からarr[n-1]に要素を挿入して、二分探索木を作成します。タスクは、AからBへのパスで最大の要素を見つけることです。 例 配列が{24、23、15、36、19、41、25、35}の場合、次のようにBSTを形成できます- A=19およびB=41とすると、これら2つのノード間の最大要素は41です。 アルゴリズム ノードAおよびBの最も低い共通祖先(LCA)を見つけます。 LCAとAの間の最大ノードを見つけます。これをmax1と呼びましょう LCAとBの間の最大ノードを見つけます。こ
-
C ++を使用して、N階乗の合計の最後の2桁を検索します。
ここでは、最後の2桁を取得する方法を説明します。 N階乗の合計の単位桁と10桁。したがって、N =4の場合、1になります。 + 2! + 3! + 4! =33.したがって、単位の場所は3で、10の場所は3です。結果は33になります。 10の後、10の場所は0のままになります。N=10以上の場合、00になります。階乗数のN=1から10のグラフを作成できます。 これらの手順を使用してこの問題を解決できます- nの値が10未満の場合、(1!+ 2!+…+ n!)mod 10 それ以外の場合、nの値が10以上の場合、(1!+ 2!+…+ 10!)mod 10 =13 例 #inc