C ++中的树实现:无法将节点转换为节点*

时间:2015-06-10 18:52:51

标签: c++ nodes

我的错误是关于main中的最后两个赋值语句。我试图通过让每个节点指向其他2个节点来创建一个基本树:左和右。我也尝试在创建它们时在n1,n2和n3前添加*,但这也不起作用......

#include <iostream>
#include <string.h>

using namespace std;

class Node{

    public:
    string value;
    Node *left, *right;

    public:
    Node(string s, Node *l, Node *r){
        value = s;
        left = l;
        right = r;
    }
    void display(){
        cout << value << left->value << right->value;
    }

};
int main(){

    Node n1("this", NULL,NULL);
    Node n2("is", NULL, NULL);
    Node n3("next", NULL, NULL);
    n1.left = n2;
    n1.right = n3;

    n1.display();
    return 0;
}

3 个答案:

答案 0 :(得分:4)

int main(){

    Node n1("this", NULL,NULL);
    Node n2("is", NULL, NULL);
    Node n3("next", NULL, NULL);
    n1.left = &n2;
    n1.right = &n3;

    n1.display();
        return 0;
}

答案 1 :(得分:1)

创建如下节点时:

Node n1("this", NULL,NULL);

您在堆栈上创建它们,因此n1是一个对象。 n1.left是一个指针,所以你必须指定一个指针。为了获得指向对象的指针,您必须使用&运算符,如:

n1.left = &n2;

答案 2 :(得分:1)

Node n1("this", NULL,NULL);
Node n2("is", NULL, NULL);
Node n3("next", NULL, NULL);

n1.left = n2;
n1.right = n3;

leftright指针到Node实例(事实上,您将它们定义为Node *leftNode *right)。

所以你必须取n2和n3的地址来进行分配:

n1.left = &n2;
n1.right = &n3;

此外,请注意,在C ++ 11/14中,您应该使用nullptr而不是NULL