2017-02-06 6 views
0

私はC++でバイナリツリーを作成しようとしています。これはツリーですC++で変数に代入中にエラーが発生しました

 
    3 
/\ 
    2 5 

このツリーを手動で作成して、このツリーの一部のアルゴリズムをテストしたいだけです。以下は同じ私のコードですが、私はこのエラーが発生します。それはどうしてそうですか?

binary_tree.cpp:19:21: error: expected type-specifier before ‘node’ 
    root->right = new node(5); 

#include<iostream> 
using namespace std; 

class Node { 
public: 
    int data; 
    Node* left; 
    Node* right; 

    Node(int data){ 
     this->data = data; 
    } 
}; 

int main(){ 

    Node *root = new Node(3); //creates a node called root and initialises its data field to 3 
    root->left = new node(2); //to the var left inside root to a new instance of Node ?? 
    root->right = new node(5); 

    return 0; 
} 

編集:貴重なご回答をいただきありがとうございます。私はこれらの変更を行った

 

     3 
    /\ 
    2 5 
/\ 
    1 4 

:私はこの木表現したい場合は

Node *root = new Node(3); 
    root->left = new Node(2); 
    root->right = new Node(5); 

    root->left->left = new Node(1); 
    root->left->right= new Node(4); 

をそれが正しいのですか?私は、私は木を印刷することができるように、明示的にnullとして葉ノードの左と右を設定する必要があるのですか?

+2

「node」ではなく「Node」 – Ari0nhh

+0

@ Ari0nhhありがとうございました。どのように私はそれを逃すことができる!そのような恥:( – anekix

+1

){ this-> data = data; left = nullptr; right = nullptr; } – user1438832

答えて

1

C++は高感度に影響場合で、資本Nでなければなりません。識別子は、宣言されているとおりに使用する必要があります。 「ノード」は「ノード」と同じではありません。

さらに、バイナリツリーのリーフターミネーションにはいくつかの指定が必要です。あなたの場合、NULLを葉終端サブノードに割り当てることは合理的です。

NULLNode::Node(int)に割り当てると、自動的にこれを行うことができます。あなたのコードは、その後

Node(int data) { 
    this->data = data; 
    this->left = NULL; 
    this->right = NULL; 
}; 

...に...

Node(int data) { 
    this->data = data; 
}; 

...から変更して、あなたは新しく作成されたすべてのノードがデフォルトで終了し、(印刷のようなもののために)反復されていることを知っています子供がNULLであることを確認する限り、問題はありません。

+0

更新された質問 – anekix

+0

@anekixはい、あなたの変更後、正しいです。 –

0

それは

root->left = new Node(2); 
root->right = new Node(5); 
関連する問題