BST mea trebuie să fie capabil să facă față cu intrările dublate. Are cineva orice strategii pentru modul de a merge despre acest lucru care nu necesită cantități excesive de cod? M-am gândit de a adăuga în mod constant duplicate la dreapta, dar apoi, aceasta va strica ordinea BST. de exemplu, ceea ce se întâmplă atunci când duplicatul are doi copii, care la rândul lor au doi copii ?. introducerea duplicat este destul de ușor, dar ceea ce trebuie să fie făcut cu nodul înlocuit?
care se ocupă cu duplicate într-un BST
Ai putea face nodurile arborelui binar de căutare în liste legate.
class Data implements Comparable<Data>
{
// These are the data elements in your binary search tree
}
class TreeNode
{
TreeNode left; // elements less than current node, or null
TreeNode right; // elements greater than current node, or null
List<Data> items = new LinkedList<Data>();
}
Aici, treeNode.itemseste întotdeauna o listă non-gol, astfel încât item1.compareTo(item2) == 0pentru fiecare item1și item2în treeNode.items.
Pentru a introduce un element de duplicat, v - ar găsi relevant TreeNodeobiect și adăugați un element nou items.
Logica de a găsi elemente este aproape la fel ca ai avut înainte, cu excepția faptului că după ce găsiți relevant TreeNodeobiectul pe care trebuie să meargă pe lista legată.
Atâta timp cât nu este o auto-echilibrare BST, eu nu văd o problemă cu punerea noduri egale, fie la stânga sau la dreapta a nodului, care este egal cu ei.
Edit (după remarca lui Simonn):
În cazul în care „nodul duplicat“ în cauză are deja 2 copii, apoi pur și simplu introduceți „nod nou duplicat“ la stânga și lăsați copilul stânga al „nod duplicat vechi“ devenit copilul din stânga al „nod nou duplicat“.
Permiteți-mi să se clarifice cu un exemplu. Arborele înainte de a introduce un duplicat:
4'
/ \
2 5
/ \
1 3
Și acum elementul 4''este inserat:
4'
/ \
4'' 5
/
2
/ \
1 3
Atâta timp cât copacul nu este auto-echilibrare, ar trebui să fie în regulă.
Mă întreb dacă aveți de fapt nevoie pentru a stoca duplicat intrările ca noduri separate? Ar adăuga o variabilă contor pentru a nodului să fie suficient? În acest fel, dacă ai traversa copacul pe care ar ști numărul de intrări duplicat și încă mai păstra ordinea.













