使用 PHP 实现树
到目前为止,你已经了解了树形数据结构的不同属性。如果将树形数据结构与现实生活中的例子进行比较,我们可以将组织结构或家庭树作为数据结构的代表。在组织结构中,有一个根节点,可以是公司的首席执行官(CEO),其次是 CXO 级员工,然后是其他级别的员工。在这里,我们不限制特定节点的任何程度。这意味着一个节点可以有多个子节点。因此,让我们设想一个节点结构,在这个结构中,我们可以定义节点属性、其父节点和子节点。它可能是这样的:
Unresolved include directive in modules/ROOT/pages/ch06/ch6-02.adoc - include::example$Chapter06/1.php[]
如果我们看一下前面的代码,就会发现我们为数据和子节点声明了两个公共属性。我们还有一个为特定节点添加子节点的方法。在这里,我们只是在数组末尾添加新的子节点。这样,我们就可以为某个节点添加多个节点作为子节点。由于树是一种递归结构,它将帮助我们以递归方式构建树,并以递归方式遍历树。
现在,我们有了节点;让我们构建一个树结构,定义树的根节点,以及遍历整个树的方法。因此,基本的树结构将如下所示:
Unresolved include directive in modules/ROOT/pages/ch06/ch6-02.adoc - include::example$Chapter06/1.php[]
前面的代码展示了一个简单的树类,我们可以在其中存储根节点引用,也可以从任意节点遍历树。在遍历部分,我们会访问每个子节点,然后立即递归调用遍历方法来获取当前节点的子节点。我们将传递一个级别,以便在节点名称的开头打印出破折号 (-),这样我们就能很容易地理解子级数据。
现在让我们创建根节点,并将其作为根节点赋值给树。代码如下:
Unresolved include directive in modules/ROOT/pages/ch06/ch6-02.adoc - include::example$Chapter06/1.php[]
在这里,我们将第一个节点创建为 CEO,然后创建了树,并将 CEO 节点指定为树的根节点。现在,是时候让我们的树从根节点开始生长了。既然我们选择了 CEO 作为示例,那么现在我们将在 CEO 下添加 CXO 和其他员工。代码如下:
Unresolved include directive in modules/ROOT/pages/ch06/ch6-02.adoc - include::example$Chapter06/1.php[]
在这里,我们首先创建四个新节点(CTO、CFO、CMO 和 COO),并将它们指定为 CEO 节点的子节点。然后,我们创建高级架构师和软件工程师节点,接着是用户界面设计师和质量保证工程师。我们将高级软件工程师节点指定为高级架构师节点的子节点,将高级架构师与用户界面工程师和质量保证工程师一起指定为首席技术官的子节点。最后一行是从根节点开始显示树。这将在命令行中输出以下几行:
CEO
-CTO
--Senior Architect
---Software Engineer
--Quality Assurance Engineer
--User Interface Designer
-CFO
-CMO
-COO
如果我们考虑前面的输出,CEO 为 0 级。首席技术官、首席财务官、首席运营官和首席运营官处于第 1 级。高级架构师、用户界面设计师和质量保证工程师处于第 2 层,软件工程师处于第 3 层。
我们已经使用 PHP 构建了一个基本的树形数据结构。现在,我们将探索不同类型的树。