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

Tree implementation in C++: Cannot convert Node to Node*

本文关键字:节点 转换 实现 C++      更新时间:2023-10-16

我的错误是关于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;
}
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;
}

当您创建如下节点时:

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

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

n1.left = &n2;
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 .