Java 树类应该包含什么?

Java 树类应该包含什么?,java,binary-tree,Java,Binary Tree,我的班级目前正在做二叉树作为数据结构单元的一部分。我知道Node类的构造函数中必须有3个参数(value、left Node、right Node)。作为需求的一部分,我们必须有一个树类。树类的用途是什么?它是否用于管理整个节点集?它是否只包含插入、删除和搜索特定节点所需的功能 先谢谢你 我的节点类: class Node { protected int data; protected leftNode; protected rightNode; Node (int data, Node le

我的班级目前正在做二叉树作为数据结构单元的一部分。我知道Node类的构造函数中必须有3个参数(value、left Node、right Node)。作为需求的一部分,我们必须有一个树类。树类的用途是什么?它是否用于管理整个节点集?它是否只包含插入、删除和搜索特定节点所需的功能

先谢谢你

我的节点类:

class Node {
protected int data;
protected leftNode;
protected rightNode;

Node (int data, Node leftNode, Node rightNode){
this.data = data;
this.leftNode = leftNode;
this.rightNode = rightNode;
}
}
“是否用于管理整个节点集?”

它是否只包含插入、删除和搜索特定节点所需的功能

基本上,是的。因此,它应该至少包含一个对根节点的引用。

“它是用来管理整个节点集的吗?”

它是否只包含插入、删除和搜索特定节点所需的功能


基本上,是的。因此,它至少应该包含对根节点的引用。

任何数据结构的目的都是为您提供一种方法来保存相关值的集合,并以有意义的方式对它们进行操作

树是一种特殊的数据结构。对于具有自然父子关系的分层数据来说,这是一个很好的选择。二叉树的每个父节点最多有两个子节点

树的另一个值得特别提及的特性是它的自相似性:树中的每个节点本身就是子树的根。递归利用了这一事实


是的,这些都是很好的开始方法。您可能需要查看
java.util.Map
接口,以了解其他可能有用的接口。

任何数据结构的目的都是为您提供一种方法来保存相关值的集合,并以有意义的方式对其进行操作

树是一种特殊的数据结构。对于具有自然父子关系的分层数据来说,这是一个很好的选择。二叉树的每个父节点最多有两个子节点

树的另一个值得特别提及的特性是它的自相似性:树中的每个节点本身就是子树的根。递归利用了这一事实


是的,这些都是很好的开始方法。您可能需要查看
java.util.Map
接口,以了解其他可能有用的接口。

是的,它应该通过与内部结构相关的所有行为和算法来提供树的功能接口

为什么这样好? 因为您将定义一些只提供一些功能并以独立方式工作的东西,以便每个人都能够使用您的树类,而不必关心节点、算法等等

理想情况下,类应该是参数化的,这样您就可以拥有
,例如,您就可以拥有泛型方法

T getRoot()
基本上,你必须对它进行投影,这样才能

  • 插入值
  • 删除值
  • 搜索值
  • 参观整棵树
  • 随便

是的,它应该通过与内部结构相关的所有行为和算法给出树的功能接口

为什么这样好? 因为您将定义一些只提供一些功能并以独立方式工作的东西,以便每个人都能够使用您的树类,而不必关心节点、算法等等

理想情况下,类应该是参数化的,这样您就可以拥有
,例如,您就可以拥有泛型方法

T getRoot()
基本上,你必须对它进行投影,这样才能

  • 插入值
  • 删除值
  • 搜索值
  • 参观整棵树
  • 随便

在我看来,
类应该包含对树的根节点以及作为一个整体在树上操作的方法和属性的引用,而不是属于每个节点的方法,如
getLeft()
getValue()


例如,我在
类中定义一个
大小
属性,向树添加或删除节点的方法(碰巧也在这个类中)将负责使大小保持最新。

在我看来,
类应该包含对树的根节点的引用,以及作为一个整体在树上操作的方法和属性,而不是属于每个节点的方法,如
getLeft()
getValue()


例如,我在
类中定义了一个
大小
属性,向树中添加或删除节点的方法(碰巧也在这个类中)将负责保持大小的最新状态。

正如您所怀疑的,这个假设有点缺陷。您定义的
节点
类型是二叉树的完美实例

Jack提到,您希望在整个节点集周围有一个
类型,以便提供诸如
getRoot
、插入、删除等操作。这当然不是一个坏主意,但决不是一个要求。这些操作中的许多可以在
节点上进行
本身,并且您不必拥有所有这些操作;例如,有支持和反对使用
getRoot
操作的参数。反对它的一个论点是,如果有一个算法在某一点上只需要一个子树,那么保持根
节点
对象将防止对算法不再需要的
节点进行垃圾收集

但更一般地说,这里需要问的真正问题是:您正在处理的哪些是接口,哪些是实现?因为