binary-tree - 二叉树结构

标签 binary-tree binary-search-tree insertion

我正在尝试解决这个问题,其中新加入的对等点将根据已经存在的对等点对象数量给出索引 [0,1,2, ... n-1] (例如 8 个存在 -> 新的对等点)将得到索引 8)。

我想根据它们的索引将这些对等对象添加到二叉树中。例如,peer 0 加入并且它将成为根节点,那么peer 1 和peer 2 将成为peer 0 的左子节点和右子节点。

我只需要二叉树遵循它应该有两个子节点的规则。

这是一个例子:

    0 

   / \

  1   2

 / \ / \

3  4 5  6

我的问题是我不确定如何实际执行此插入以保持 2 个子规则。起初,我假设正常的 BST 插入规则可以工作,但一旦我实际编码,我意识到枢轴/键的问题 - 我是根据索引插入的。一切都会成为正确的 child

我真的很困惑,但我认为解决方案应该是一个我看不到的微不足道的解决方案。有什么建议吗?

编辑: 感谢您的帮助! 我想我找到了一些可以满足我需求的东西,所以我将其留在这里。我将有一个隐式二叉树结构。加入的节点将根据其索引放入优先级队列。这将表明他们是否可以为他们分配子级,并且一旦有 2 个子级,对等点将从该队列中删除

最佳答案

您需要考虑的一些事项:

你为什么想要 BST?

BST,顾名思义,主要用于搜索。但是,如果您为加入的每个新用户分配唯一标识符,则无需使用 BST 来搜索它们,因为您可以通过索引从数组中访问它们。

如果每个用户都玩了一个游戏并获得了特定的分数,那么 BST 会更有用。为了在数据结构中组织用户,使他们能够通过分数轻松搜索/组织,您可以将玩家插入到 BST 中,并在他们完成游戏时以他们的分数作为键。但对于像这样的唯一标识符,没有理由使用 BST。事实上,您显示的数据结构不是 BST。 BST 看起来像这样:

   3 

  / \

 1   5

/ \ / \

0 2 4  6

还有其他数据结构更合适吗?

如果您已经更好地理解了为什么 BST 不是组织用户 ID 的有用结构,那么接下来您应该考虑一下您实际上想要做什么。如果您只是想将所有用户存储在一个数据结构中,那么列表(数组)完全没问题,其中列表的索引对应于用户 ID。

如果您希望向这些用户添加某种分组,请考虑使用哈希表。例如,如果您希望能够查找用户的 friend ,您可以创建一个哈希表,其中用户 ID(键)映射到 friend 的用户 ID(值)列表。

希望这对您有所帮助。如果我还能提供更多帮助,或者我还没有完全理解您想要实现的目标,请告诉我


更新

因此,根据上面的评论,您的困惑似乎在于二叉树和 BST 之间的区别。二叉树是每个节点有 <= 2 个子节点的任何树,而二叉搜索树对节点键的值施加了额外的约束。二叉树结构是您想要的,但您不需要它来搜索,也不想比较这些值。

关于binary-tree - 二叉树结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25188105/

相关文章:

c - 中序遍历是以错误的顺序打印

java - 并行化将排序数组转换为二叉搜索树函数

c++ - 'main'已停止工作-C++ [dev c++]

python - 在 Python 中遍历二叉树

c++ - 二叉搜索树 C++

c - C 中的通用插入排序

c - 按顺序插入字符串数组

c++ - 进行少量插入时应该使用哪个 STL 容器?

java - 这个算法在 Java 中执行有什么问题?

java - 为什么我的方法打印一个空列表?