utilizzando uno stack per ottenere l'altezza di un BST

voti
0

Sto cercando di ottenere l'altezza di un BST con uno stack. Mi è stato detto che avrei dovuto usare preorder e misurare trova la più grande dimensione dello stack. Tuttavia, questo non sembra funzionare. Tutte le idee su quello che sto facendo male.

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;

}

È pubblicato 14/09/2011 alle 16:44
fonte dall'utente
In altre lingue...                            


1 risposte

voti
1

La dimensione dello stack è valore errato della profondità per alcuni nodi. Per esempio. se il nodo corrente è un figlio destro di altro nodo, lo stack non contiene questo nodo (il nostro padre). Per il nodo più giusta nella struttura, lo stack non avrà elementi.

Dovrete calcolare la profondità in modo corretto. Nel tuo caso, si può andare su più livelli in uno schiocco, quindi sottraendo uno non funziona, ma se si salva la profondità corrente allo stack (e ripristinare mentre popping), funzionerà.

Per fare questo, si dovrebbe cambiare la tua definizione stack per esempio.

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

e aggiungere una variabile current_depth.

Per ogni " nodePtr=nodeptr->left/right", si incrementa current_depth. spingere con

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

e prima di pop, il ripristino current_depthcon

current_depth = s.top().second;

(Il puntatore nodo è ovviamente .first)

Risposto il 14/09/2011 a 17:04
fonte dall'utente

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