egy halom, hogy a magassága egy BST

szavazat
0

Én próbálok a magassága egy BST egy verem. Azt mondták, hogy kéne használni előrendelésre, és mérjük található a legnagyobb méret a verem. Ez azonban úgy tűnik, nem működik. Bármilyen ötletet, hogy mit csinálok rosszul.

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;

}

A kérdést 14/09/2011 16:44
a forrás felhasználó
Más nyelveken...                            


1 válasz

szavazat
1

A stack mérete nem megfelelő értéke mélysége néhány csomópont. Például. ha az aktuális csomópont egy jobb gyermek egyéb csomópont, a verem nem tartalmazza ezt a másik csomópont (a szülő). A rightest a fában, a verem nem lesz megfelelő terméket.

Meg kell számítani a mélység helyesen. Az Ön esetében, akkor menj fel több szintet egy pop, így egyet kivonva nem fog működni, de ha menteni az aktuális mélységet, a verem (és vissza, miközben felbukkanó), akkor működni fog.

Ehhez azonban meg kell változtatni a verem definíció pl.

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

és adjunk hozzá egy változót current_depth.

Minden egyes „ nodePtr=nodeptr->left/right”, akkor növeljük current_depth. Push

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

és mielőtt kinyitod, helyreállítása current_depthés

current_depth = s.top().second;

(A csomópont mutató nyilvánvalóan .first)

Válaszolt 14/09/2011 17:04
a forrás felhasználó

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