根据类表示生根树

时间:2013-02-21 12:30:07

标签: c++ tree binary-tree

我很难理解Representing Rooted Trees中的以下段落。它基本上显示了两种表示树的方法。 G& T对我来说有点清楚,但另一个对我来说并不是很清楚,它显示了类的定义。

  • G& T选项:每个节点都有3个引用:item,parent,children。子项的单个引用必须引用一个列表(因此节点可以根据需要包含多个子项)。

  • 另一个选择是直接链接兄弟姐妹。 E.g。

    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分钟)第二种方法需要更少的内存。有人可以帮我理解类定义,以及与第一种方法相比,这将需要更少的内存吗?

1 个答案:

答案 0 :(得分:1)

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

使用外部列表查看G& T选项的布局:

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

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

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