java polymorfní binární vyhledávací strom

hlasů
0

Jak mohu implementovat polymorfní strom binárního vyhledávání (který využívá EmptyTree a NonEmptyTree) bez použití kontroly downcasting nebo třídy?

Položena 02/04/2010 v 06:31
zdroj uživatelem
V jiných jazycích...                            


1 odpovědí

hlasů
1

Vytvoření společného rozhraní, jako je například:

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

Pak poskytuje tříd, které implementují společné rozhraní:

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) {
      // ...
   }
}

Vaše implementace pro EmptyTree bude vždy indikovat selhání při hledání položky (ať už tím, že vrátí null nebo vyvoláním výjimky), zatímco vaše implementace NonEmptyTree se buď vrátit sám (v případě, že za předpokladu, vyhledávání klíčových zápasů), nebo přenést na levé straně nebo pravá podstromy. Vzhledem k tomu, doleva nebo doprava Podstrom bude vždy existovat (to bude buď být NonEmptyTree nebo EmptyTree), třída „NonEmptyTree“ lze jednoduše odkazuje na své děti přes společné rozhraní a spoléhat na to, že typ runtime udělá správnou věc (není tedy nutné provádět lití nebo typ kontrolu dětí při provádění algoritmu).

Jediné místo, kde je třeba znát typ runtime je, když si postavit děti.

Odpovězeno 02/04/2010 v 06:54
zdroj uživatelem

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