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

Xとの絶対差がC++で最大値を与えるノードを見つけます


ツリーがあり、すべてのノードの重みと整数xがあるとします。 | weight [i]--x|となるようなノードiを見つける必要があります。最小です。グラフが以下のようで、x =15

Xとの絶対差がC++で最大値を与えるノードを見つけます

出力は3になります。ノードごとに次のようになります

ノード1、| 5 – 15 | =10

ノード2、| 10 – 15 | =5

ノード3、| 11 – 15 | =4

ノード4、| 8 – 15 | =7

ノード5、| 6 – 15 | =9

アイデアは単純です。ツリーでDFSを実行し、ノードの追跡を行います。ノードのxとの重み付き絶対差が最小値を示します

#include <iostream>
#include <vector>
#include <cmath>
using namespace std;
int min_value = INT_MAX, x, result;
vector<int> graph[100];
vector<int> weight(100);
void dfs(int node, int parent) {
   if (min_value > abs(weight[node] - x)) {
      min_value = abs(weight[node] - x);
      result = node;
   }
   for (int to : graph[node]) {
      if (to == parent)
      continue;
      dfs(to, node);
   }
}
int main() {
   x = 15;
   weight[1] = 5;
   weight[2] = 10;
   weight[3] = 11;
   weight[4] = 8;
   weight[5] = 6;
   graph[1].push_back(2);
   graph[2].push_back(3);
   graph[2].push_back(4);
   graph[1].push_back(5);
   dfs(1, 1);
   cout << "The node number is: " << result;
}

出力

The node number is: 3

  1. C++の二分探索木で最小値のノードを見つけます

    1つの二分探索木があるとします。二分探索木で最小要素を見つける必要があります。したがって、BSTが以下のような場合- 最小要素は1になります。 左のサブツリーは常に小さい要素を保持していることがわかっています。したがって、左がnullになるまで左のサブツリーを何度もトラバースすると、最小の要素を見つけることができます。 例 #include<iostream> using namespace std; class node{    public:       node *left;      

  2. C++で指定された違いを持つペアを見つけます

    配列Aがあるとすると、n個の異なる要素があります。 xとyの差が与えられた差dと同じになるように、配列Aからペア(x、y)を見つける必要があります。要素のリストがA=[10、15、26、30、40、70]のようで、差が30の場合、ペアは(10、40)と(30、70)になります この問題を解決するために、配列がソートされていると仮定し、左から2つのポインターをポイント要素に取ります。最初は、最初の1つの「i」が最初の要素を指し、2番目の「j」がポイント要素を指します。 2番目の要素。 A [j] – A [i]がnと同じ場合、ペアを出力します。A[j] – A [i]