【发布时间】:2017-07-24 23:35:52
【问题描述】:
我需要从左子树或右子树中获取完整二叉树中某个级别的所有节点。我目前从数据库中检索二叉树作为数组,例如:
[1,2,3,4,5,6,7] 代表这样的一棵树:
1
/ \
/ \
2 3
/ \ / \
/ \ / \
4 5 6 7
所以我需要做的基本上是获取树的一个级别并将其作为数组返回。类似于level(3,"left") -> [4,5] 或level(2, "right") -> [3]。我正在考虑创建一个 BinaryTree 对象以递归方式执行它,但我想不出一种方法来跟踪调用中的级别,而不必像我想保留的那样用级别或类似的东西标记每个节点数据库尽可能干净。有什么想法吗?
编辑:我真的需要左子树或右子树的所有节点,而不是整个树。我正在展示一场锦标赛,所以我需要将它分成两半。如果我不必拆分它,我可能会这样做:
function level($array, $level_num) {
return array_slice($array, pow(2, $level_num)-1, pow(2, $level_num));
}
我真的不知道如何扩展它以仅获取左子树或右子树的级别数组。
【问题讨论】:
-
这是一个非常酷的问题。试一试并显示您失败的代码。另请注意,您渲染的图像与示例数组不匹配。数组有 4 没有 8。图像没有 4 但有 8。
-
@BeetleJuice 抱歉,没注意到。刚刚更新了。
-
好的,我写了一个解决方案。在您的 OP 中,
level(3)仍然包含8,即使它不在树中。 -
@mickmackusa 是的,我的错,这是另一个错字。
标签: php arrays binary-tree