Я хочу пройтись по этой системе узлов, убедившись, что поражен каждый узел, и я не хочу использовать рекурсию. Каждый узел на самом деле имеет два связанных узла. Я не знаю, называется ли это двойным связанным списком или что-то в этом роде.
Узел выглядит как
class Node {
private:
Node* next_node_type_a;
Node* next_node_type_b;
}
Диаграмма
|next_node_type_a| ->
|next_node_type_a| -> |next_node_type_b| ->
|start-node| ->
|next_node_type_b| -> |next_node_type_a| ->
|next_node_type_b| ->
Первоначально я этого не делалсм. второй узел, поэтому у меня было
while(node){
DoStuffWithNode(node);
node = node->GetNextNodeTypeA();
}
Но как я могу изменить это, чтобы обходить оба пути узла, все еще используя цикл while?
Вот пример кода, с которым можно работать
// Example program
#include <iostream>
#include <string>
class Node {
public:
Node* node_left;
Node* node_right;
std::string value;
Node();
};
Node::Node(){
node_left = 0;
node_right = 0;
}
int main()
{
Node start;
Node a;
Node b;
Node c;
Node d;
Node e;
Node f;
start.value = "start";
a.value = "a";
b.value = "b";
c.value = "c";
d.value = "d";
e.value = "e";
f.value = "f";
start.node_left = &a;
start.node_right = &b;
a.node_left = &c;
a.node_right = &d;
b.node_left = &e;
b.node_right = &f;
Node *n = &start;
while(n){
std::cout << "New node: " << n->value << std::endl;
n = n->node_left;
}
return 0;
}
Редактировать: Я только что понял, что это дерево.