不使用指针的树实现?

Tree implementation without using pointers?

我在某个地方找到了这段代码,它是一棵树的简单实现。为什么 leftright 必须是指向 Node 的指针?换句话说,如果 leftright 不是指针并且只是 Node 类型,你还能实现一棵树吗?如果是这样,有人可以提供一个例子吗

#include <iostream>

struct Node { 
    int data; 
    struct Node* left; 
    struct Node* right; 
  
    Node(int val) { 
        data = val;
        left = NULL; 
        right = NULL; 
    } 
};

int main(int argc, char* argv[]) {
    struct Node* root = new Node(0);
    root->left = new Node(1);
    root->right = new Node(0);
    root->right->left = new Node(1);
    root->right->right = new Node(0);
    root->right->left->left = new Node(1);
    root->right->left->right = new Node(1);

    std::cout << root->data << "\n";
}

感谢所有帮助,谢谢!

更简单的链表例子,即每个Node只有一个next:

struct Node {
    Node next;
};

C++不允许这样做,你会得到一个错误,但让我们考虑一下没有错误。然后每个 Node 包含另一个 Node 并且该成员再次包含另一个 NodeNode 还有另一个成员 next 也是 Node。此 Node 具有类型 Node 的成员 nextNode 还有另一个成员 next 也是 Node。此 Node 有一个 next 类型的成员 Node... 无限。

也许您来自一种语言,其中对象实际上是引用。在 C++ 中,对象就是对象。它不能是“无对象”。对象不能是 NULL.

另一方面,指针可以指向一个对象,但也可以指向任何地方。这很好:

 struct Node {
     Node* next;
 };

每个 Node 都有一个成员 next 指向 Node 或不指向 Node

C++ 中不允许第一个原因的一种方法是编译器必须知道成员的大小。无论对象本身的大小如何,指针的大小都是相同的。但是,正如上面所解释的,这不是C++的限制,而是不可能有无限多次包含自己的东西。