Java полиморфный бинарное дерево поиска

голоса
0

Как я могу реализовать полиморфное бинарное дерево поиска (что делает использование EmptyTree и NonEmptyTree) без использования или понижающего приведение класса проверки?

Задан 02/04/2010 в 06:31
источник пользователем
На других языках...                            


1 ответов

голоса
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 всегда будет указывать на сбой при поиске элемента (независимо от того, возвращая нуль или бросая исключение), в то время как ваша реализация NonEmptyTree либо вернуть себе (если при условии поиска ключевых матчей) или делегировать влево или правые поддерева. Поскольку левый или правое поддерево всегда будет существовать (или будет NonEmptyTree или EmptyTree), класс «NonEmptyTree» может просто сослаться на свои ребенок через общий интерфейс и полагаться на то, что тип выполнения будет делать правильные вещи (при этом нет необходимости делать какую-либо литье или типа проверку детей в реализации алгоритма).

Единственное место, где вам нужно знать тип во время выполнения, когда вы строите ребенок.

Ответил 02/04/2010 в 06:54
источник пользователем

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more