-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;
4

1 回答 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

通常,您会在构造函数中将所有三个指针都设置为 null:

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

然后你会构建这样的结构:

int main()
{
    node n1;
    node *l = new node;
    n1.lchild = l;
    ...
}
于 2013-10-13T11:43:14.673 回答