2010-03-31 76 views
-1

我在它試圖二叉樹轉換到一個列表我們在哪裏可以使用遞歸方法「這個」

我想使它遞歸一個靜態類的方法,但我不能

我在我的班級中實施了一些其他方法,如add()delete()find()

下面是代碼

class ARB 
{ 
     private: 
       struct BT 
       { 
         int data; 
         BT *l; 
         BT *r; 
       }; 
       struct BT *p; 
     public 
       ARB(); 
       ~ARB(); 
       void del(int n); 
       void add(int n); 
}; 

    void ARB::del(int num) 
{ 
//The code ,don't care about it 

    }; 

main() 
{ 
// 
    BTR T; 
    T.add(3); 
    T.add(5); 

}; 

這是我們應該做的轉移從二叉樹的代碼上市。

LLC ARB::changeit() 
{ LLC x; 
     while(this!=NULL) 
     { 
      x.add(this->data); // 
       if(this.l==NULL) 
       { 
         x.print(); //To print the elemnts of List 
         return(x); 
       } 
       else 
       { 
         x=changeit(this.l); 
       } 

       if(this.r!=NULL) 
       { 
         x.~LLC(); 
         x=changeit(this.r); 
         return(x); 
       } 

     } 

} 
+1

究竟是什麼問題?你在哪裏得到錯誤?哪些錯誤? – sth 2010-03-31 02:43:53

+0

該程序未編譯,代碼中存在概率,但無法找到它 – 2010-03-31 02:51:20

+3

看來OP希望通過遞歸將二叉樹轉換爲列表,但不知道如何。雖然這個問題似乎與實際問題無關。在能夠幫助他之前,似乎有很多概念問題需要解決。谷歌(或搜索 - 如果你在中國)。 – 2010-03-31 02:54:33

回答

0

問題的描述是難以遵循,但我注意到,你所使用的關鍵字thisstatic,這通常是相互排斥的。

任何static功能屬於一個類,而不是一個對象。可以使用ARB::myStaticFunction()語法調用靜態函數,並且不需要實際的ARB對象。所以,this裏面這樣一個函數並沒有提到任何對象而且是沒有意義的。

0

此呼叫是無意義:

x=changeit(this.l); 

由於this是指具有不構件稱爲lARB對象。這同樣適用於這樣的代碼:

this->data 

有時你做this.data,有時this->data所以你似乎混淆了一個對象指針的概念。你的ARBBT*這叫做p,它是樹根,據說。你應該從它開始。

而且這是obviosly錯誤:

x.~LLC(); 

不要調用LLC明確的析構函數!

用於遞歸放置二叉樹成一個列表(僞代碼)的一般算法:

tolist(node, list): 
    if node == NULL: 
    return 
    else: 
    tolist(node.left, list) 
    list.append_to_end(node.data) 
    tolist(node.right) 

這假定列表的append_to_end是有效的,以使感測(這是可以實現與該列表中的結束指針) 。此外,它將列表作爲參數並對其進行修改。您可以輕鬆地將其更改爲具有執行此操作的內部遞歸方法以及創建列表的外部方法,調用此方法並返回列表。

相關問題