私は質問Tree Nodes Getting Lostを調べていましたが、これはC++ 11で行うには良い練習になると思いました。私のツリーノードに欠けているリンクがあります
以下のコードが付属しています。しかし、ルート要素はノードの残りの部分に接続していないため、なぜ見つけることができません。
編集:ここでコードを見つけることができます:https://ideone.com/NCyRsx私はVisual Studioを使用しますが、私は同じ結果を得ます。
#include <iostream>
#include <vector>
#include <array>
struct Node
{
int key;
std::vector<Node> children;
Node(int k)
{
key = k;
}
void Add(Node n)
{
children.push_back(n);
}
void display()
{
std::cout << "My value is " << key << std::endl;
std::cout << "My " << children.size() << " kid(s) are : " << std::endl;
for(auto n : children)
{
n.display();
}
}
};
int main()
{
constexpr int numNode = 5; // for
std::array<int, numNode> numbers = { 4, -1, 4, 1, 1 };
std::vector<Node> nodesStorage;
for (int i = 0 ; i < numNode ; i++)
{
nodesStorage.push_back(Node(i));
}
nodesStorage.push_back(Node(-1));
for (int i = 0 ; i< numNode ; i++)
{
if(numbers[i] == -1) // the root
{
nodesStorage[numNode].Add(nodesStorage[i]);
}
else
{
nodesStorage[numbers[i]].Add(nodesStorage[i]);
}
}
nodesStorage[1].display();
nodesStorage[numNode].display();
return 0;
}
コードの出力を投稿しますか?私は、 'Add'呼び出しの周りにコピーされている' Node'sが原因だと思います。 – Ohashi
一つの問題は、「子供たち」に***コピー***のノードが含まれているということです。例えば、ノードへのポインタ。 –
@JoachimPileborgまあ、ノード4が子供に追加された後に更新されるとは思わない。何らかの理由でルートノードの場合と思われます。だから私は混乱している。 –