Ich möchte eine BST erstellen, die beim Einfügen von Element wird den Index davon in einem perfekt ausgeglichenen Baum zurückgeben. Zum Beispiel (die Zahl in Klammern gibt tatsächlichen Index):Erhalten tatsächlichen Index während des Einfügens in einem BST
5(1)
/\
/ \
3(2) 6(3)
/
2(4)
oder
1(1)
\
\
2(3)
\
\
3(7)
Im zweiten Beispiel können wir sehen, dass es kein linkes Kind des Elements 1, aber immer noch 2 Element ein Index von 3, wie es in einem perfekt ausgeglichenen Baum der Fall wäre.
Der Wurzelknoten beginnt mit 1.
Was ein effizienter Weg, um den Index Return on Insertion sein würde?
nun in Einfügung eines Elements in einem BST ist mein Code wie folgt:
Node newNode = new Node(id);
if(root==null){
root = newNode;
return 1;
}
Node current = root;
Node parent = null;
while(true){
parent = current;
if(id<current.data){
current = current.left;
if(current==null){
parent.left = newNode;
return;
}
}else{
current = current.right;
if(current==null){
parent.right = newNode;
return;
}
}
}
Ich bin nicht in der Lage zu verstehen, wie ich das Niveau halten soll, wird das Element in die Berechnung den Index eingefügt wird.
Die Anzahl der Elemente, die eingefügt werden können, ist maximal 3 * 10^5. Das Speichern in einem Array, um die Indizes zu erhalten, ist keine effektive Methode
ich auf jeden Fall daran gedacht Arrays, jedoch scheiterte ich mir Die Anzahl der Elemente wird maximal 3 * 10^5 betragen. Die Verwendung von Array-Indizes ist keine gute Lösung. – user1692342
@ user1692342 Ich sehe nicht, wie das negative Auswirkungen auf diese Implementierung hätte –
Es ist wichtig. Wenn die Eingabe in aufsteigender Reihenfolge ist. Dann werden die Elemente in 1, 3, 7, 15 und so weiter eingefügt. Sehr schnell wird der Array-Index extrem groß und ich werde das Array überhaupt nicht speichern können. – user1692342