ved hjelp av en stabel for å få høyden på en BST

stemmer
0

Jeg prøver å få høyden på en BST bruke en stabel. Jeg ble fortalt at jeg skulle bruke forhåndsbestilling og måle finne den største størrelsen av stabelen. Men dette ser ikke ut til å fungere. Noen ideer om hva jeg gjør galt.

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;

}

Publisert på 14/09/2011 klokken 15:44
kilden bruker
På andre språk...                            


1 svar

stemmer
1

Stabelen størrelse er uriktig verdi av dybde for enkelte noder. Eg. hvis den nåværende node er en rettighet barn av annen node, betyr bunken ikke inneholder denne andre node (morselskapet). For rightest node i treet, vil bunken har ingen varer.

Du må beregne dybde riktig. I ditt tilfelle, kan du gå opp flere nivåer i en pop, så trekke en vil ikke fungere, men hvis du lagre din nåværende dybde til stakken (og gjenopprette den mens popping), vil det fungere.

For å gjøre det, bør du endre din stack definisjon til f.eks.

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

og legge til en variabel current_depth.

For hver " nodePtr=nodeptr->left/right", øke du current_depth. Push med

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

og før du pop, gjenopprette current_depthmed

current_depth = s.top().second;

(Noden pekeren er åpenbart i .first)

Svarte 14/09/2011 kl. 16:04
kilden bruker

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