Derzeit implementiere ich BST in Java für mein Universitätsprojekt. Wie wir wissen, ist BST ziemlich gut in der Suche nach einer einzigen Einheit Einheit, die O (log n) in einem ausgeglichenen Baum ist.Get Intervall von binären Suchbaum so schnell wie sortierte Array
Aber, wie man Suche zwischen Wert a
und b
durchführt? (A < b)
Lassen Sie uns sagen, dass ich diesen Baum haben
│ ┌── 125
│ ┌── 122
│ │ └── 120
│ ┌── 117
│ │ │ ┌── 113
│ │ └── 112
│ │ └── 108
│ ┌── 86
│ │ │ ┌── 85
│ │ └── 72
└── 59
│ ┌── 56
│ ┌── 52
│ ┌── 47
│ │ │ ┌── 43
│ │ └── 39
│ │ │ ┌── 38
│ │ └── 36
└── 28
│ ┌── 18
│ ┌── 15
└── 2
└── 1
I range(a,b)
ein Verfahren schaffen wollen zurückzukehren Wert zwischen a
und b
inklusive. (Anmerkung: a
und b
im Baum nicht notwendig sind!)
Zum Beispiel: range(53,112)
56,59,72,85,86,108,112
zurück Hier ist mein Pseudo-Code
/* recursive method */
range(a,b)
range(a,b,root);
/* helper method */
range(a,b,node)
if (a <= node.value <= b)
if (node.left != null) and (node.value != a)
range(a,b,node.left)
print node.value
if (node.right != null) and (node.value != b)
range(a,b,node.right)
else if node.value < a
if (node.right != null)
range(a,b,node.right)
else // node.value > b
if (node.left != null)
range(a,b,node.left)
Aber ich denke, dass meine Methode langsamer ist.
Zum Beispiel müssen wir in einem sortierten Array die binäre Suche auf a
und b
durchführen und ihren jeweiligen Index erhalten. Danach iterieren wir vom Index a
zum Index b
.
Stimmt es, dass BST beim Suchen mehrerer Werte langsamer arbeitet? Ist es möglich, meinen Algorithmus so schnell wie ein sortiertes Array zu verbessern?