【发布时间】:2013-03-20 01:06:32
【问题描述】:
所以我需要帮助想出一个表达式,该表达式将始终为我提供子节点在二叉树中的父节点的位置。以下是我的老师将在我们的考试中提出的问题示例:
“考虑一棵完全有 10,000 个节点的二叉树,用一个从索引 0 开始的数组来实现。数组是通过从树中从左到右一次一层提取元素来按顺序填充的。假设一个节点有它的值存储在位置 4999。该节点的父节点的值存储在哪里?"
我的老师没有告诉我们如何解决这样的问题。她只是说“画一棵二叉树并找到一个模式”。我就是这么做的,但我什么也想不出来!请帮忙。谢谢。
【问题讨论】:
-
您应该准确地写出您尝试过的内容。某处可能有一个简单的错误。
-
按照说明,这个问题是不可能的。你一定有误解或记错了。我可以立即想到 4998 和 5000 都是答案。
-
没有。给我任何孩子父母位置的表达式将采用“2^(n+1) - 1”或类似的形式。然后输入子节点的位置(在本例中为 4999),表达式应该为您提供父节点的位置。
-
我真的不需要知道如何解决这个问题。我需要更多的策略来找到像上面那样的算法或方程,它会给我父节点的位置。她说她会给我们一个实现为数组的二叉树。二叉树的根可以从数组的索引 0 或 99 开始。我的工作是找到一个方程,这样当您插入子节点的位置时,它将产生父节点的位置。我希望我在这里有意义
-
@MooingDuck:真的吗?第 k 行有 2^k 个元素,所以我们可以将 4999 映射回树位置,获取父节点的树位置,然后将其映射回数组索引,确定吗?为什么结果会有歧义?
标签: c++ tree binary-tree parent-child uncertainty