2016-04-02 30 views
0

Bir ağacın içinden geçmeye çalışıyorum ve içeriğini önek, sonek ve infix notasyonuna yazdırıyorum. Şu anda program, girilen ifadenin sadece bir operatörünü basıyor.Birden çok parametreli Ağaç Geçişi

ben yinelemeli bu tamamlama yöntemleri gördük, ama hepsi doğrudan düğümü'nü sınıfına ilgiliydi işlevlerinden, içinde bir parametre kullandık. (Example)

Nasıl birden parametrelerle yinelemeli ağacın sağ ve sol düğümleri geçme hakkında gitmek? Yoksa bu geçerli bir seçenek mi? Bana sorun veren kod "expressiontree.cpp" dosyasında 32-42 satırlarıdır, ancak başlık dosyasını ve kodun bağlam için çıktılarının bir örneğini ekledim.

CODE (Yerel metin editörü bana bazı sorunlar veriyor çünkü bağlantı GitHub'dan yönlendirir.) Siz sahip herhangi fikirler için

Teşekkür!

cevap

0

Bu, birden fazla parametre ile yinelemeli yapılabilir, ancak bunu gibi bir "ETreeNode" Örneğin bir işaretçi her zaman geçirmek zorunda kalacak:

bool ETreeNode::preorder(ETreeNode* currentNode, char* s, int& n, const int& len){ 
    bool error = false; 

    if (!currentNode) // insure that the "currentNode" is not NULL 
     return true; // you can change this to implement your "error" variable if you want to 

    //YOUR CODE GOES HERE 
    if (m_bIsOperator) 
    { //operator node 
     s[n++] = m_chOp; //append operator character to s 

     preorder(currentNode->m_pLeftChild, s, n, len); // move to the next left node 
     preorder(currentNode->m_pRightChild, s, n, len); // move to the next right node 

     s[n++] = '\0'; //zero terminator 
    } //if 
    else 
    { //number node 
     char buffer[32]; //temporary character buffer 
     sprintf(buffer, "%d", m_nValue); //print number into buffer 
     strcat((char*)(s + n), buffer); //append buffer to s 
    } //else 

    return error; 
} //preorder 

Soru: veri mi ağaç infix düzeninde mi?

"n" hiçbir zaman "len" eşit veya daha büyük hale emin olmak için bazı kod uygulamak istediğiniz olacak.

Ayrıca her yineleme sonra sıfır terminatör yazmaktan programınızı tutmak için bir yol uygulamak isteyecektir.

+0

Geri bildirim için teşekkürler! Bunu deneyeceğim ve nasıl çalıştığını göreceğim. – HammerQueen

+0

Metodunuzu kullanmak, derleyici hataları verdi çünkü işlev başka bir ilgili dosyada kullanılıyor. Talimatlara göre, burada belgelediğim dosyalar dışındaki hiçbir şeyi değiştiremem. Yönteminizin nasıl işe yarayacağını görüyorum ama özel durumumda bunun geçerli olduğunu düşünmüyorum. İşlev hala 3 parametre alan bir yöntem var mı? – HammerQueen

+0

Normal olarak, bunlar gibi veri yapıları ile veri yapısını temsil eden ve yöneten bir sınıf vardır ve daha sonra bu veri yapısının elemanlarını temsil eden en az bir başka alt sınıf vardır. Bu seninkiyle mi? Örneğin, "ETree" adlı bir sınıfınız var mı? Sahip olduğunuz "talimatlar" nedeniyle "ETreeNode" sınıfını değiştiremeyeceğinizi; Bunun bir okul projesi mi yoksa böyle bir şey mi olduğu anlamına mı geliyor? Yeni sınıflar ekleyebilir veya ekleyemiyor musunuz? Son soru, eğer bir ebeveyn sınıfı varsa, bunu değiştirebiliyor musunuz? – Fearnbuster