使用 PHP 数组创建二叉树
我们可以使用 PHP 数组来实现二叉树。由于二叉树的子节点最多为 0 到 2 个,因此我们可以将最大子节点数设为 2,并构建一个公式来查找给定节点的子节点。让我们从上到下、从左到右为二叉树中的节点编号。因此,根节点的编号为 0,左边的子节点为 1,右边的子节点为 2,这样一直到每个节点都被编号为止,就像下图一样:

我们不难看出,节点 0 的左侧子节点是 1,右侧子节点是 2。对于节点 1,左边的子节点是 3,右边的子节点是 4,以此类推。我们可以很容易地把它用公式表示出来:
如果 i 是节点编号,那么:
Left node = 2 x i + 1
Right node = 2 x (i + 1)
现在,让我们使用 PHP 数组为比赛日程部分创建一个示例。如果我们按照讨论的内容进行排序,那么它将看起来像这样:
$nodes = [];
$nodes[] = "Final";
$nodes[] = "Semi Final 1";
$nodes[] = "Semi Final 2";
$nodes[] = "Quarter Final 1";
$nodes[] = "Quarter Final 2";
$nodes[] = "Quarter Final 3";
$nodes[] = "Quarter Final 4";
基本上,我们将创建一个从 0 开始自动索引的数组,该数组将用作二叉树表示。现在,我们将修改 BinaryTree
类,以使用该数组代替我们的节点类、左右子节点以及遍历方法。现在,我们将根据节点编号而不是实际的节点引用来遍历:
Unresolved include directive in modules/ROOT/pages/ch06/ch6-06.adoc - include::example$Chapter06/3.php[]
从前面的实现中我们可以看到,遍历部分使用的是节点定位而不是引用。节点位置只是数组索引。因此,我们可以直接访问数组索引并检查它是否为空。如果不是,我们就可以使用递归方式继续深入。如果要使用数组创建二叉树并打印数组值,我们必须编写以下代码:
Unresolved include directive in modules/ROOT/pages/ch06/ch6-06.adoc - include::example$Chapter06/3.php[]
如果我们在命令行中运行此代码,我们将看到以下输出:
Final
-Semi Final 1
--Quarter Final 1
--Quarter Final 2
-Semi Final 2
--Quarter Final 3
--Quarter Final 4
我们可以使用一个简单的 |