einen Stapel mit der Höhe eines BST zu erhalten

stimmen
0

Ich versuche, die Höhe eines BST zu bekommen einen Stapel verwenden. Mir wurde gesagt, dass ich Preorder verwenden sollte und messen Sie die größte Größe des Stapels finden. Allerdings scheint dies nicht zu funktionieren. Irgendwelche Ideen, was ich falsch mache.

int PBT::maxDepth() {
if (!root) {
    return -1;
}
int depth=0;
stack<TreeNode *>s;
TreeNode * nodePtr=root;
for (; ; ) {        
    while (nodePtr) {
        s.push(nodePtr);
        if (s.size() > depth)
            depth = s.size();
        nodePtr=nodePtr->left;
    }if (s.empty()) {
        break;
    }
    nodePtr=s.top();
    s.pop();
    nodePtr=nodePtr->right;
}
return depth;

}

Veröffentlicht am 14/09/2011 um 16:44
quelle vom benutzer
In anderen Sprachen...                            


1 antworten

stimmen
1

Die Stapelgröße ist falsch Wert der Tiefe für einige Knoten. Z.B. wenn der aktuelle Knoten ein rechtes Kind von anderen Knoten ist, wird der Stapel nicht enthalten diese anderen Knoten (unsere Eltern). Für den Rightest Knoten im Baum, wird der Stapel ist leer.

Sie verlassen nun die Tiefe richtig berechnen müssen. In Ihrem Fall können Sie mehrere Ebenen in einem Pop-up gehen, wird nicht funktionieren, ein so subtrahieren, aber wenn Sie Ihre aktuelle Tiefe, um den Stapel zu speichern (und es wiederherstellen, während popping), wird es funktionieren.

Um dies zu tun, sollten Sie Ihre Stack Definition zB ändern.

stack<pair<TreeNode*, unsigned> > stack;

und fügen Sie eine Variable current_depth.

Für jede „ nodePtr=nodeptr->left/right“ Sie erhöhen current_depth. Drücken Sie mit

s.push(make_pair(nodeptr, current_depth));

und bevor Sie Pop, wiederherstellen current_depthmit

current_depth = s.top().second;

(Der Knotenzeiger ist offensichtlich in .first)

Beantwortet am 14/09/2011 um 17:04
quelle vom benutzer

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more