【发布时间】:2014-10-01 00:35:43
【问题描述】:
我正在尝试解决这个问题,其中一个新加入的对等点将被赋予一个索引 [0,1,2, ... n-1],基于已经存在的对等点对象的数量(例如 8 个存在 -> 新对等点将获得索引 8)。
我想根据它们的索引将这些对等对象添加到二叉树中。例如,peer 0 加入,它将成为 root,那么 peer 1 & peer 2 将成为 peer 0 的左右孩子。
我只需要二叉树遵循它应该有两个孩子的规则。
这是一个例子:
0
/ \
1 2
/ \ / \
3 4 5 6
我的问题是我不确定如何实际执行此插入以保持 2 个孩子的规则。起初我假设一个正常的 BST 插入规则会起作用,但是一旦我真正编码了它,我就意识到了枢轴/键的问题——我是根据索引插入的。一切都会变成正确的孩子
我真的坚持这一点,但我认为解决方案应该是一个我无法看到的微不足道的解决方案。有什么建议吗?
编辑: 感谢您的帮助! 我想我想出了一些可以满足我需求的东西,所以我会把它留在这里。我将有一个隐式的二叉树结构。加入的对等点将根据其索引进入优先级队列。这将表示他们是否可以将孩子分配给他们,并且一旦有 2 个孩子,一个对等点将从该队列中删除
【问题讨论】:
-
如果你想根据你已经给它的索引添加,那么你不需要二叉树,你需要一个数组。
-
@DaveZych 你可以索引一棵二叉树……你甚至可以使用一个数组来保存一棵二叉树……
-
@progenhard 我很清楚这一点。但他在将每个项目添加到 BT 之前为其分配了一个索引,并希望在将其添加到 BT 时使用该索引。他本质上是在构建一个链表。只需将项目添加到 BT 并让它自己构建。
-
@DaveZych 我最初确实有一个数组结构,但可能会有多达 10k 个对等点。随着新对等点的删除和添加,这将严重影响性能
-
@JerryFox 将它们添加到您最终得到的任何数据结构后,您的目标是什么?你需要搜索它们吗?循环遍历每一个并执行一些操作?
标签: binary-tree binary-search-tree insertion