Ich habe einen einfachen Algorithmus, der eine Liste von Listen zurückgibt, wobei jede innere Liste die Knoten auf einer anderen Ebene eines Binärbaums enthält. Ich habe Probleme zu verstehen, wie ich den Umfang meiner inneren Liste "zurücksetzen" kann (z. B. siehe unten).Umfang eines Objekts in einer Schleife
Mein Baum ist ein einfaches Spielzeug Baum wie so:
struct Node {
int data;
Node *left, *right;
}
Ich benutze eine einfache bfs, die eine Liste von Listen zurückgeben sollen. Ich versuche, eine neue Liste auf jeder der Schleifen zu erstellen, aber ich bin nicht sicher, wie man die Liste "löscht" und eine neue beginnt.
std::vector< std::vector<Node *> > build_lists(Node *root) {
std::vector< std::vector<Node *> > result;
Node *newline = new Node { std::numeric_limits<int>::min(), nullptr, nullptr };
std::deque<int> q;
q.push_back(root);
q.push_back(newline);
Node *tmp;
std::vector<Node *> inner; // HERE IS WHERE IS SET THE FIRST INNER VECTOR
while(!q.empty()) {
tmp = q.front();
q.pop_front();
if (tmp == newline) {
result.push_back(inner);
std::vector<Node *> inner; // HERE IS WHERE I TRY TO ''RESET'' THE VECTOR
if (!q.empty())
q.push_back(newline);
} else {
inner.push_back(tmp);
if (tmp->left)
q.push_back(tmp->left);
if (tmp->right)
q.push_back(tmp->right);
}
}
}
Offensichtlich habe ich nicht verstanden, Umfang und einige grundlegende Sprachfunktionen. Wenn mir jemand helfen könnte, mich in die richtige Richtung zu lenken, würde ich es begrüßen.
Hat nicht abgestimmt. Mit Liste meinst du "inner"? – gsamaras
@gsamaras ja. Entschuldigung, Vektor, denke ich hier. –
Das Deklarieren eines zweiten Objektnamens "inner" führt zum ersten Objekt nichts aus - es bedeutet nur, dass Sie zwei Objekte auf dem Stapel mit demselben Namen haben (eine Sache, die in C++ erlaubt ist, aber allgemein als verpönt angesehen wird) wird Verwirrung stiften). Um den Vektor zurückzusetzen, sollten Sie stattdessen inner.clear(); –