2015-03-10 4 views
1

У меня есть бинарное дерево как -Implemetning Дерево с картой

  1 
     /\ 
      3 5 
      /\ 
      7 9 

Теперь я пытаюсь представить дерево с помощью HashTable. Таким образом, я создал HashTablebinaryTree -

HashTable binaryTree = new HashTable<Integer, Intgeger>(); 

Тогда я пытаюсь добавить элемент в binaryTree. Я хочу, чтобы 1 был как ключ двоичного файла и всех его дочерних элементов (например, 3 и 5) в качестве значения. Так что я пытаюсь поставить -

binaryTree.put(1, 3); 
binaryTree.put(1, 5); 

Поскольку существует 2 значения с ключом 1, поэтому второй один не вставлен в HashTable - BinaryTree?

Как добавить и 3 и 5 в binaryTree? Или есть ли лучшая структура данных для этого?

Заранее спасибо?

+2

Вам понадобятся две карты - одна для левого ребенка и одна для правильного ребенка - если вы собираетесь делать это так, или у вас может быть карта из «Integer» с типом, представляющим пару целых чисел. Или вы не можете сделать это с помощью Карты вообще, но представляете дерево как тип объекта. –

ответ

2

Похоже, вы пытаетесь «свернуть» списки смежности в одну хеш-таблицу. Это возможно, но вам нужно изменить тип элемента на то, что может содержать два целых числа.

Наиболее распространенный подход был бы с помощью TreeNode класса:

class TreeNode { 
    private final int left; 
    private final int right; 
    public int getLeft() { return left; } 
    public int getRight() { return left; } 
    TreeNode(int l, int r) { left = l; right = r; } 
} 

HashTable<Integer,TreeNode> binaryTree = new HashTable<Integer,TreeNode>(); 

Теперь вставка будет выглядеть следующим образом:

binaryTree.put(1, new TreeNode(3, 5)); 

Вы также можете использовать массив из двух int с вместо пользовательский класс, но код с использованием такого представления не будет считаться следующим:

HashTable<Integer,int[]> binaryTree = new HashTable<Integer,int[]>(); 
binaryTree.put(1, new int[] { 3, 5 }); 
+0

Вау! Поэтому во втором случае я могу использовать массив/массивList для представления более двух детей. Поэтому я думаю, что второй может быть использован для представления любого дерева, я прав? – Razib

+0

@Razib Да, второй подход может быть использован для представления дерева с любым количеством детей на узел. – dasblinkenlight

+0

Большое спасибо. Я попытаюсь реализовать вторую. – Razib

Смежные вопросы