用类表示有根树

Representing Rooted Tree in terms of class

本文关键字:表示      更新时间:2023-10-16

我在理解以下取自《代表有根的树》的段落时遇到了困难。它主要展示了两种表示树的方法。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个。