每个节点具有恒定时间的C++树

C++ Tree with constant time to each node

本文关键字:定时间 C++ 节点      更新时间:2023-10-16

我正在处理树。每个节点都有具有Tree*值的对象。我读取的数据看起来像:

1
2
2
...

这意味着,将1作为0的子项,将2作为1的子项;将3作为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=新树(x);是指向树的新对象的指针,并添加此指针到[i]位置的tab,并将此指针添加到tab[i-1]元素的子元素。怎么了这个代码?这些行无法编译:

n = new Tree(x);
tab[i] = n;

有错误:

  1. 行:不能将"Tree*"类型的值分配给"int"类型的实体
  2. 行:不能将类型为"int"的值分配给类型为"Tree*"的实体

首先将n声明为int。稍后您将n声明为Tree*

这两个声明冲突,因为它们试图用两种不同的类型声明同一个变量。为了避免冲突,请使用两个不同的变量名。