met behulp van een stapel om de hoogte van een BST te krijgen

stemmen
0

Ik ben op zoek naar de hoogte van een BST met behulp van een stapel te krijgen. Ik kreeg te horen dat ik preorder moet gebruiken en meet u de grootste omvang van de stapel. Echter, dit lijkt niet te werken. Enig idee van wat ik verkeerd doe.

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;

}

De vraag is gesteld op 14/09/2011 om 16:44
bron van user
In andere talen...                            


1 antwoorden

stemmen
1

De stack is incorrecte waarde van diepte voor bepaalde knooppunten. Bijv. Als het huidige knooppunt een rechterkind andere knooppunt, werkt de stapel dit andere knooppunt (onze moeder) bevatten. Voor de Rechtse knooppunt in de boom, zal de stapel geen items.

Je moet de diepte correct te berekenen. In uw geval, kan je gaan meer niveaus in een pop, dus één af te trekken zal niet werken, maar als u uw huidige diepte op te slaan in de stapel (en te herstellen, terwijl popping), het zal werken.

Om dat te doen, moet je je stack definitie bv veranderen.

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

en voeg een variabele current_depth.

Voor elke " nodePtr=nodeptr->left/right", kunt verhogen current_depth. Duw met

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

en voordat je pop, te herstellen current_depthmet

current_depth = s.top().second;

(Het knooppunt aanwijzer klaarblijkelijk in .first)

antwoordde op 14/09/2011 om 17:04
bron van user

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