bir yığın kullanarak BST yüksekliği elde etmek için

oy
0

Bir yığın kullanarak bir BST yüksekliğini almak için çalışıyorum. Ben yığının büyük boyutunu bulmak ön sipariş kullanabilir ve ölçmek gerektiği söylendi. Ancak, bu çalışma görünmüyor. Ben yanlış yapıyorum ne herhangi bir fikir.

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;

}

Oluştur 14/09/2011 saat 16:44
kaynak kullanıcı
Diğer dillerde...                            


1 cevaplar

oy
1

yığın boyutu bir düğüm için derinlik yanlış bir değerdir. Örneğin. Geçerli düğüm diğer düğümün sağ çocuğu ise, yığın bu diğer düğümü (bizim ana) içermez. ağaçtaki en doğru düğümü için, yığın hiç ürün yok olacaktır.

Doğru derinlik hesaplamak gerekir. Senin durumunda, bunu bir işe yaramaz çıkarılarak, bir pop daha fazla seviye yukarı gidebilir, ancak yığın için geçerli derinlik kaydetmek (ve haşhaş iken geri), eğer çalışacaktır.

Bunu yapmak için, örneğin sizin yığın tanımını değişmelidir.

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

ve bir değişken eklemek current_depth.

Her "için nodePtr=nodeptr->left/right", sen artırır current_depth. ile itin

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

Eğer pop öncesi ve, geri current_depthile

current_depth = s.top().second;

(Düğüm işareti olduğu açıktır .first)

Cevap 14/09/2011 saat 17:04
kaynak kullanıcı

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