एक ढेर का उपयोग कर एक BST की ऊंचाई प्राप्त करने के लिए

वोट
0

मैं एक BST एक ढेर का उपयोग कर की ऊंचाई प्राप्त करने की कोशिश कर रहा हूँ। मुझे बताया गया था कि मैं अग्रिम आदेश का उपयोग करें और मापने के ढेर के सबसे बड़े आकार खोजना चाहिए। बहरहाल, यह काम करने के लिए प्रतीत नहीं होता। मैं गलत क्या कर रहा हूँ की कोई भी विचार।

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;

}

14/09/2011 को 16:44
का स्रोत उपयोगकर्ता
अन्य भाषाओं में...                            


1 जवाब

वोट
1

ढेर आकार कुछ नोड्स के लिए गहराई से गलत मान है। उदाहरण के लिए। यदि वर्तमान नोड अन्य नोड के एक सही बच्चा है, ढेर इस दूसरे नोड (हमारे माता-पिता) शामिल नहीं है। पेड़ में rightest नोड के लिए, ढेर कोई आइटम नहीं होगा।

आप सही ढंग से गहराई की गणना करना होगा। आपके मामले में, आप एक पॉप में अधिक स्तर तक जा सकता है, तो एक काम नहीं करेगा घटाकर, लेकिन अगर आप ढेर के लिए अपने वर्तमान गहराई को बचाने (और इसे फिर से स्थापित है, जबकि पॉपिंग), यह काम करेंगे।

ऐसा करने के लिए, आप जैसे करने के लिए अपने ढेर परिभाषा बदलना चाहिए।

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

और एक चर जोड़ने current_depth

प्रत्येक "के लिए nodePtr=nodeptr->left/right", आप को बढ़ा देते current_depth। साथ पुश

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

और इससे पहले कि आप पॉप, बहाल current_depthसाथ

current_depth = s.top().second;

(नोड सूचक में स्पष्ट रूप से है .first)

14/09/2011 को 17:04
का स्रोत उपयोगकर्ता

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