2012-02-26 8 views
0

木を使って作業しています。すべてのノードにTree *値を持つオブジェクトがあります。 、それは意味C++各ノードに一定時間のツリー

1 
2 
2 
... 

0の子として1を入れ、1の子として2を入れ、通常のフォームで2 oを子として3を置く:私は次のようになりますどのデータを読み込むI-1の子としてのX置きますここで、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]の場所のタブに追加し、このポインタをタブ[i-1]要素の子に追加します。 このコードは何が問題なのですか? これらの行はコンパイルされません:

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

エラーで:

  1. line: Value ot type "Tree *" cannot be assigned to an entity of type "int".
  2. line: Value ot type "int" cannot be assigned to an entity of type "Tree *".
+1

related:[C++の動的ツリー](http://stackoverflow.com/questions/9452341/dynamic-tree-in-c) – amit

+2

書式を修正してください。テキストを選択し、質問エディタで** {} **ボタンをクリックすることで、テキストをコードとしてフォーマットすることができます。 –

+2

また、「動作しない」と定義してください。具体的に何が問題なのですか? –

答えて

2

まずあなたがintとしてnを宣言する。後でnTree*と宣言します。

これらの2つの宣言は、同じ変数を2つの異なる型で宣言しようとするため、競合します。この競合を回避するには、2つの異なる変数名を使用します。

関連する問題