Swift中的树数据结构

如果您不熟悉数据结构和算法,那么树数据结构就是一个很好的起点。 实际上,如果您曾经使用过JSON,那么您已经很熟悉这个概念。

树是一种数据结构,可用于对对象之间的层次关系进行建模。 该树由节点组成,每个节点具有以下组成:

  1. 一个值。
  2. 可选的父节点。
  3. 子节点列表。

术语

虽然树中的所有对象都被视为节点,但它们根据周围的上下文具有不同的命名约定。

  • 根节点 :这是树的最高层的节点,并且是唯一没有任何父节点的节点。
  • 叶子节点 :这是一个不包含任何子节点的节点。
Swift中的节点数据结构

这里要注意的一些事情是:

1. Node类对它拥有的值是通用的。

但这不是必需的,但是,它允许您以与数组相同的方式构建包含不同数据类型的各种树,从而有助于代码重用。

2.我们已将持有父节点的属性标记为弱。

由于父节点拥有对其所有子代的引用,而子代拥有对其父代的引用,因此我们将父代参考标记为弱,以防止创建强参考循环。

3.我们已将父级和子级属性标记为只读。

这是因为直接修改这些值可能容易出错。 最好通过Node类上的方法公开一个安全的API。 您可以看到,通过在Node上使用addChild方法,我们将永远不会忘记在新添加的节点上设置父级。

树木和递归就像面包和黄油。 您可以尝试:

1.创建一个在包含给定值的树中查找第一个节点的方法。

2.打印出节点及其所有子节点的文本表示形式。

在Swift算法俱乐部中更深入地了解这棵树的例子。