Swift中的树数据结构
如果您不熟悉数据结构和算法,那么树数据结构就是一个很好的起点。 实际上,如果您曾经使用过JSON,那么您已经很熟悉这个概念。
树是一种数据结构,可用于对对象之间的层次关系进行建模。 该树由节点组成,每个节点具有以下组成:
- 一个值。
- 可选的父节点。
- 子节点列表。
术语
虽然树中的所有对象都被视为节点,但它们根据周围的上下文具有不同的命名约定。
- 根节点 :这是树的最高层的节点,并且是唯一没有任何父节点的节点。
- 叶子节点 :这是一个不包含任何子节点的节点。
这里要注意的一些事情是:
1. Node类对它拥有的值是通用的。
但这不是必需的,但是,它允许您以与数组相同的方式构建包含不同数据类型的各种树,从而有助于代码重用。
2.我们已将持有父节点的属性标记为弱。
由于父节点拥有对其所有子代的引用,而子代拥有对其父代的引用,因此我们将父代参考标记为弱,以防止创建强参考循环。
3.我们已将父级和子级属性标记为只读。
这是因为直接修改这些值可能容易出错。 最好通过Node类上的方法公开一个安全的API。 您可以看到,通过在Node上使用addChild方法,我们将永远不会忘记在新添加的节点上设置父级。
树木和递归就像面包和黄油。 您可以尝试:
1.创建一个在包含给定值的树中查找第一个节点的方法。
2.打印出节点及其所有子节点的文本表示形式。
在Swift算法俱乐部中更深入地了解这棵树的例子。