Powiedziano mi, że TreeMap klasy Java używa implementacji drzewa RB. Jeśli tak, to w jaki sposób wykonuje się drzewo genealogiczne w ramach zamówienia, preorder i postorder treeMap?Opcje sortowania Java TreeMap?
Czy to nie jest możliwe?
Powiedziano mi, że TreeMap klasy Java używa implementacji drzewa RB. Jeśli tak, to w jaki sposób wykonuje się drzewo genealogiczne w ramach zamówienia, preorder i postorder treeMap?Opcje sortowania Java TreeMap?
Czy to nie jest możliwe?
Nie można tego zrobić z mapą drzewa zaimplementowaną w bibliotece kolekcji. Oto implementacja Red-Black Tree w Javie, na którą możesz jednak spojrzeć. Sprawdź metody printTree()
, aby zobaczyć, w jaki sposób poruszają się po drzewie w posortowanej kolejności.
/**
* Print all items.
*/
public void printTree() {
printTree(header.right);
}
/**
* Internal method to print a subtree in sorted order.
* @param t the node that roots the tree.
*/
private void printTree(RedBlackNode t) {
if(t != nullNode) {
printTree(t.left);
System.out.println(t.element);
printTree(t.right);
}
}
Od który może można napisać swoje własne metody przemierzać drzewa we wszystkich trzech zamówień.
AFAIK klasy TreeSet/TreeMap nie ujawniają żadnych swoich wewnętrznych elementów i są po prostu zgodne z interfejsem Set/Map. Iterator ma tylko gwarantowaną kolejność.
jestem trochę zakłopotany, aby dlaczego chcesz zeskanować te węzły w Inorder ponieważ celem tych drzew nie jest do reprezentowania relacji między obiektami (np formuł matematycznych), ale tylko do przechowywania wszystkich z nich i odzyskaj je sprawnie.
Można przynajmniej zrobić spacer Inorder pomocą iteratora oraz dla każdej pętli:
void inOrderWalk(TreeMap<K,V> treeMap) {
//this will loop through the values in the map in sorted order (inorder traversal)
for (Map.Entry<K,V> entry : treeMap.entrySet() {
V value = entry.getValue();
K key = entry.getKey()
}
}
Jednakże inne plakaty rację: Java nie narazić którejkolwiek z mechaniki drzew, więc preorder lub postorder nie jest możliwy w tym widoku.
To bardziej kwestia teorii niż aplikacji. – kylex
Witam @Uri, RB Drzewa zawsze zachowują równowagę, niezależnie od kolejności włożenia kluczy, prawda? Więc czy słuszne jest założenie, że jeśli wstawimy klucze do TreeMap w zdegenerowany sposób, czas wyszukiwania i wstawiania będzie wynosił 'O (log N)'? – SexyBeast