java多态二叉搜索树

时间:2010-04-02 05:31:47

标签: java polymorphism binary-search-tree

如何在不使用向下转换或类检查的情况下实现多态二叉搜索树(使用EmptyTree和NonEmptyTree)?

1 个答案:

答案 0 :(得分:1)

创建一个通用界面,例如:

interface TreeNode<K, V> {
   TreeNode<K, V> find(K key)
}

然后提供实现公共接口的类:

class EmptyTree<K, V> implements TreeNode<K, V> {
   public TreeNode<K, V> find(K key) {
      // ...
   }
}

class NonEmptyTree<K, V> implements TreeNode<K, V> {
   public TreeNode<K, V> find(K searchKey) {
      // ...
   }
}

您对EmptyTree的实现将始终指示搜索项目失败(无论是通过返回null还是抛出异常),而NonEmptyTree的实现将返回自身(如果提供的搜索键匹配)或委托给左或右子树。因为左或右子树将始终存在(它将是NonEmptyTree或EmptyTree),“NonEmptyTree”类可以通过公共接口简单地引用它的子节点,并依赖于运行时类型将做正确的事实(因此在算法的实现中没有必要对子项进行任何转换或类型检查)。

您需要知道运行时类型的唯一地方是构建子项时。