2013-10-13 31 views
-1
class node{ 
    unsigned long int data; 
    node *lchild,*mchild,*rchild;   //childs of ternery tree 
    unsigned long int *stack1,*stack2; 
    static int count,top1,top2; 
    public: 
    node() 
    { 
     data=0; 
     lchild->data=0; 
     mchild->data=0; 
     rchild->data=0; 
    } 
    node(int x) 
    { 
     data=0; 
     lchild->data=0; 
     mchild->data=0; 
     rchild->data=0; 
    } 
node(unsigned long int d) 
    { 
    data=d; 
    lchild->data=floor(d/2); 
    mchild->data=floor(d/3); 
    rchild->data=floor(d/4); 
    } 
node(node* n) 
    { 
    data=n->data; 
    lchild->data=n->lchild->data; 
    mchild->data=n->mchild->data; 
    rchild->data=n->rchild->data; 
    } 
void mallocate(int x) 
    { 
    stack1=new unsigned long int[x]; 
    stack2=new unsigned long int[x]; 
    } 
void free() 
    { 
    delete[] stack1; 
    delete[] stack2; 
    } 


void storedata(node *); 
void backtrack(node *); 

}root,temp,*block; 
+1

你能縮小下來一點?你會得到什麼錯誤信息?哪行代碼失敗? –

回答

2

在程序異常終止在此構造:

node() 
    { 
     data=0; 
     lchild->data=0; 
     mchild->data=0; 
     rchild->data=0; 
    } 

您正在使用尚未初始化指針lchild,mchild和rchild。你應該刪除這3行:

  lchild->data=0; 
     mchild->data=0; 
     rchild->data=0; 

然後你必須重新考慮你的設計。新節點應該只是初始化自己。您必須在節點類外部構建樹結構。如果你堅持在節點類中構建某些東西,你應該正確地分配它。

您有更多的構造方法是做訪問數據不存在:

node(int x); 
node(unsigned long int d); 
node(unsigned long int d); 
node(node* n); 

我勸你剛剛構建樹...數據將被設置爲零的每個節點構造你已經擁有的線路:data=0;。你所有的特殊計算應該放在構造函數之外,你可以只有一個構造函數node,也許可以爲構造節點設置數據。

然後,你不在任何構造函數中調用mallocate方法,你應該在所有構造函數中都這樣做。接下來,您應該製作一個析構函數~node並從中調用this->free方法。無論如何,該方法從stdlib.h的標準免費功能有一個模糊的名稱,我會將它重命名爲其他內容,例如cleanup

通常你會設置所有三分,空在構造函數中:

node() 
    { 
     data=0; 
     lchild=NULL; 
     mchild=NULL; 
     rchild=NULL; 
    } 

然後你將建立這樣的結構:

int main() 
{ 
    node n1; 
    node *l = new node; 
    n1.lchild = l; 
    ... 
}