folosind o stivă pentru a obține înălțimea unui BST

voturi
0

Sunt încercarea de a obține înălțimea unui BST folosind o stivă. Mi sa spus că ar trebui să folosesc precomandă și se măsoară găsi cea mai mare dimensiune a stivei. Cu toate acestea, acest lucru nu pare să funcționeze. Orice idei a ceea ce am făcut greșit.

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;

}

Întrebat 14/09/2011 la 16:44
sursa de către utilizator
În alte limbi...                            


1 răspunsuri

voturi
1

Dimensiunea stivei este valoarea incorectă a adâncimii pentru unele noduri. De exemplu. în cazul în care nodul curent este un copil drept de alt nod, stiva nu conține acest alt nod (părinte nostru). Pentru rightest nodul din copac, stiva va avea nici un produs.

Va trebui să calculeze corect adâncimea. În cazul dumneavoastră, puteți merge în sus mai multe niveluri într-o poziție favorabilă, astfel încât scăderea nu va funcționa, dar dacă salvați adâncimea curentă la stiva (și restaura-l în timp ce popping), acesta va funcționa.

Pentru a face acest lucru, ar trebui să modificați definiția stiva la ex.

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

și se adaugă o variabilă current_depth.

Pentru fiecare „ nodePtr=nodeptr->left/right“, va incrementa current_depth. Push cu

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

și înainte de a pop, restabiliți current_depthcu

current_depth = s.top().second;

(Pointerul nod este , evident , în .first)

Publicat 14/09/2011 la 17:04
sursa de către utilizator

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