2017-02-06 2 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; 
} 

EDIT: Спасибо всем за ценный отклик. если я хочу, чтобы представить это дерево:

 

     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' – Ari0nhh

+0

@ Ari0nhh благодарит так много. как я мог пропустить это! такой позор :( – anekix

+1

Node (интермедиат данные) { this-> данные = данные, слева = nullptr, справа = nullptr; }? – user1438832

ответ

1

C++ является случай senstive. Вы должны использовать идентификаторы точно так, как они объявлены. «node» - это не то же самое, что «Node».

В дополнении, окончание листьев в двоичном дереве должно иметь некоторое обозначение. В вашем случае присвоение NULL ограничивающим список суб-узлам представляется разумным.

Вы можете сделать это автоматически, назначив NULL в Node::Node(int). Изменение кода из ...

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

... до ...

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

После этого, вы знаете, что все вновь создаваемые узлы прекращаются по умолчанию и итерация (что-то вроде печати) не будет проблемой, если вы проверяете наличие детей NULL.

+0

не могли бы вы пересмотреть обновленный вопрос – anekix

+0

@anekix Да, после ваших изменений, это правильно. –

0

Он должен быть капитал N,

root->left = new Node(2); 
root->right = new Node(5); 
Смежные вопросы