C++ 用类表示根树

C++ 用类表示根树,c++,tree,binary-tree,C++,Tree,Binary Tree,我很难理解下面这段选自的内容。它基本上展示了两种表示树的方法。G&T对我来说有点清楚,但另一个对我来说不太清楚,这显示了类的定义 G&T选项:每个节点有3个引用:项、父项、子项。子节点的单个引用必须引用一个列表(因此节点可以根据需要拥有任意多的子节点) 另一种选择是让兄弟姐妹直接链接。例如 class SibTreeNode { Object item; SibTreeNode parent; SibTreeNode firstChild; // Left-most child. Si

我很难理解下面这段选自的内容。它基本上展示了两种表示树的方法。G&T对我来说有点清楚,但另一个对我来说不太清楚,这显示了类的定义

  • G&T选项:每个节点有3个引用:项、父项、子项。子节点的单个引用必须引用一个列表(因此节点可以根据需要拥有任意多的子节点)

  • 另一种选择是让兄弟姐妹直接链接。例如

    class SibTreeNode {
     Object item;
     SibTreeNode parent;
     SibTreeNode firstChild; // Left-most child.
     SibTreeNode nextSibling;
    }
    
    public class SibTree {
      SibTreeNode root;
      int size; // Number of nodes in the tree.
    }
    

视频中的作者还声称(大约18分钟)第二种方法需要更少的内存。有人能帮我理解类定义吗?和第一个方法相比,这将需要更少的内存

第二个选项是一个简单的侵入式单链表。侵入式单链接列表占用的内存更少,因为不需要从列表节点指向节点内容的指针

通过外部列表查看G&T选项的布局:

class ListNode {
    SibTreeNode* object;
    ListNode* nextElement;
};

class SibTreeNode {
    Object* item;
    SibTreeNode* parent;
    ListNode* childList;
};

每个SibTreeNode元素有5个指针,而不是4个。

让我们构造一个
SibTreeNode
。好的,我们必须构造
父项
和两个子项。要构造
parent
,我们必须构造
SibTreeNode
。。。回到乞丐那里。指针@蝉:你指的是缓存效果吗?如果是,请记住,您可能希望在遍历期间访问负载,这会增加空间分隔列表节点和负载的成本。