Java中的二进制树静态方法

Rob*_*ood 6 java binary-tree static-methods binary-search-tree

我在我的Java实现二叉树的这些实例方法和搜索二叉树:getSize(),getHeight(),getDepth(),getPreOrder(),getInOrder(),getPostOrder()getLevelOrder().这些方法在其他具有参数的递归方法中使用树的根Node.从OOP的角度来看,哪个更适合使用:

  1. 使用这些递归方法作为静态方法,因为它们使用Node不属于实际类的object(),并且它们不使用任何类属性,
  2. 它们可以是实例方法,因为它们可以在此树的子树中使用,并且它们不使用任何静态属性,
  3. 或者他们可能在其他静态类中UtilsTree()

aio*_*obe 3

从 OOP 的角度来看,我相信方法 2 是正确的选择。(在 OOP 中,静态通常是不受欢迎的。)

据我了解,该方法使用this作为根,然后遍历树的其余部分而不调用任何实例方法?考虑到其他节点属于同一类,这还不算太糟糕,这意味着代码已经在所有对象之间共享。(该方法可以访问其他实例的私有成员等等。)

话虽这么说,我认为getSizegetHeightgetDepthgetPreOrder、 、getInOrdergetPostOrdergetLevelOrder可以实现为适当的递归实例方法。(如我错了请纠正我。)

第四个选择也不算太糟糕,那就是使用访问者模式并拥有一个NodeVisitor界面。