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;
问问题
653 次
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 回答