我很难理解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分钟)第二种方法需要更少的内存。有人可以帮我理解类定义,以及与第一种方法相比,这将需要更少的内存吗?
答案 0 :(得分:1)
第二个选项只是一个侵入性的单链表。侵入式单链接列表占用的内存较少,因为您不需要从列表节点到节点内容的指针。
使用外部列表查看G& T选项的布局:
class ListNode {
SibTreeNode* object;
ListNode* nextElement;
};
class SibTreeNode {
Object* item;
SibTreeNode* parent;
ListNode* childList;
};
每个SibTreeNode元素有5个指针,而不是4个。