【问题标题】:How are nodes in binary search tree stored in java? and other questions related二叉搜索树中的节点如何存储在java中?和其他相关问题
【发布时间】:2023-03-16 11:52:01
【问题描述】:

我正在尝试实现二叉搜索树。但我不明白它们将如何存储在数组中。这是我存储它的数据结构:

private Comparable[] intHeap;

我仍然不确定如何使用可比性,请有人解释一下这种数据结构的用途吗?

如何检查二叉搜索树的最大和最小元素?

如果我有以下树,它会以 1,3,4,6,7,8,10,13,14 的形式存储在 intHeap 中吗?

如果有多个节点级别,您如何知道接下来要转到哪个节点?

提前谢谢你。

【问题讨论】:

  • 您显然不是第一个处理 Java BST 的人。您已经研究并发现了什么?
  • 关于Comparable,如果我搜索“java 可比较”,第一个命中是Java doc 页面。 docs.oracle.com/javase/7/docs/api/java/lang/Comparable.html你应该阅读它。我承认这有点迟钝,基本上是比较两个对象xy 你会打电话给x.compareTo(y)

标签: java algorithm tree


【解决方案1】:

从数组的声明来看,你正在构建的是一个binary heap——一个专门的基于树的数据结构,通常存储在一个数组中。与依赖显式引用的树结构不同,堆依赖于一种巧妙的索引方案,将树“打包”成线性数据结构。

Comparable 接口可以让你构建一个可以存储任意类数据的堆,只要它们实现了Comparable 接口。这很有用,因为您可以构建可重用的代码来处理您自己类型的数字、字符串或对象。

如果有多个节点级别,你怎么知道接下来要去哪个节点?

如果一个节点位于索引n,它的两个子节点将位于索引2n + 1 和2n + 2。如果您位于索引k 并且想要跟随左子树,请设置k = 2*k+1 ;如果你想跟随右子树,设置k = 2*k+2。继续使用相同的算法,直到在 intHeap 数组中找到 null 元素。

【讨论】:

  • 谢谢你,节点索引的解释真的很有帮助,我爱你x
【解决方案2】:

你需要通过一个很好的教程。只是提醒你,节点会是这样的

Class Node
{
   int data;//ideally should be generic.
   Node leftChild;
   Node rightChild;
   ...

}

推荐您访问Binary Search Tree - Java Implementation

【讨论】:

  • 你能给我一个好的教程吗?感觉就像几天,我没有得到任何地方。谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多