použitím stoh získat výšku BST

hlasů
0

Snažím se dostat výšku BST pomocí zásobníku. Bylo mi řečeno, že bych měl použít preorder a změřit zde největší velikost zásobníku. Nicméně, toto nevypadá, že pracovat. Nějaké nápady na to, co dělám špatně.

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;

}

Položena 14/09/2011 v 16:44
zdroj uživatelem
V jiných jazycích...                            


1 odpovědí

hlasů
1

Velikost zásobníku je nesprávná hodnota hloubky pro některé uzly. Např. v případě, že aktuální uzel je právo dítě uzlu, stoh neobsahuje tento jiný uzel (mateřskou). Pro rightest uzlu ve stromu, stohu nebude mít žádné položky.

Budete muset správně vypočítat hloubku. Ve vašem případě, můžete jít až více úrovní v jednom popu, tak se odečte jeden nebude fungovat, ale pokud uložíte aktuální hloubku do komína (a obnovit jej při praskání), bude to fungovat.

K tomu, že byste měli změnit definici stohu např.

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

a přidat proměnnou current_depth.

U každého nodePtr=nodeptr->left/right„“ vy zvýšit current_depth. tlačit

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

a než se pop, obnovit current_depths

current_depth = s.top().second;

(Ukazatel uzel je samozřejmě v .first)

Odpovězeno 14/09/2011 v 17:04
zdroj uživatelem

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