我正在使用树。每个节点都有Tree *值的对象。我读了看起来像的数据:
1
2
2
...
这意味着,把1作为0的孩子,把2作为1的孩子,把3作为孩子o 2.以常规形式:把x作为i-1的孩子,i是行数。 我决定做树,看起来像:
class Tree {
public:
int value;
stack <Tree*> children;
Tree ();
Tree (int x) {value = x;}
void wypisz();
};
所以现在当我读取输入时,我有这样做的事情(但它不起作用):
int n,x;
scanf("%d",&n);
Tree **tab;
tab = (Tree **) malloc(sizeof(Tree*)*n);
Tree *n = 0;
tab[0] = new Tree(0);
for(int i=1;i<n;++i) {
scanf("%d",&x);
n = new Tree(x);
tab[i] = n;
tab[i-1]->children.push(n);
}
delete n;
所以我需要n = new Tree(x);是指向树的新对象的指针,并添加此指针 在[i]处选项卡,并将此指针添加到tab [i-1]元素的子项。怎么了? 这段代码? 那些行不编译:
n = new Tree(x);
tab[i] = n;
有错误:
- line:值ot类型“Tree *”不能分配给“int”类型的实体。
- line:值ot type“int”不能分配给“Tree *”类型的实体。
醇>
答案 0 :(得分:2)
首先,您将n
声明为int
。稍后您将n
声明为Tree*
。
这两个声明冲突,因为它们试图用两种不同的类型声明相同的变量。为避免冲突,请使用两个不同的变量名称。