Cześć, mamy do napisania drzewko którego polecenie brzmi tak:
Napisz klasę realizującą losowe drzewo binarne RBT. Klasa powinna umożliwiać przeglądanie drzewa, dopisywanie do niego losowych wartości (parametry N, p, MAX), wyszukiwanie elementu oraz usuwanie drzewa.
2) Przetestuj klasę z punktu pierwszego, pisząc odpowiedni program dopisujący elementy do drzewa, przeglądający drzewo, wyszukujący element w drzewie oraz usuwający drzewo.
3) Opracuj metodę usuwającą pojedynczy element z drzewa RBT
generalnie napisaliśmy już część, ale tu przychodzi brak pomysłu.Jak zaimplementować do kodu parametr p który mówi nam ile konkretnie wartości ma być po prawej stronie? Poniżej wklejam kod(nie wiem czy dobrze.)
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import java.util.Scanner;
public class RandomBinaryTree {
public static void main(String[] args) {
// System.out.println("cześć podaj liczbę elementów drzewa");
// Scanner odczyt = new Scanner(System.in);
// n =odczyt.nextInt();
// n=(n/2);
RandomBinaryTree w = new RandomBinaryTree();
wezęł tree = w.randomBinaryTree(n+2);
w.visitInOrder(tree);
}
private void visitInOrder(wezęł tree) {
if (tree == null) return;
visitInOrder(tree.left);
StringBuilder s=new StringBuilder();
if (tree.d==0) {
s.append(0 + "[root] ");
} else if ( tree.left== null && tree.right== null){
s.append(tree.d+"[wartość] ");
}else {
s.append(tree.d+"[liść] ");
}
System.out.print (s.toString());
visitInOrder(tree.right);
}
wezęł randomBinaryTree(int n) {
List<wezęł> wezęłList = new ArrayList<>();
int wezęłIndex = 0;
wezęł root = wezęł.of(wezęłIndex++);
wezęł firstLeaf = wezęł.of(wezęłIndex++);
wezęł secondLeaf = wezęł.of(wezęłIndex++);
root.left = firstLeaf;
root.right = secondLeaf;
wezęłList.add(firstLeaf);
wezęłList.add(secondLeaf);
Random random = new Random();
while (wezęłList.size() < n + 1) {
int nextInternalwezęłIndex = random.nextInt(wezęłList.size());
wezęł internalwezęł = wezęłList.get(nextInternalwezęłIndex);
internalwezęł.left = wezęł.of(wezęłIndex++);
internalwezęł.right = wezęł.of(wezęłIndex++);
wezęłList.remove(nextInternalwezęłIndex);
wezęłList.add(internalwezęł.left);
wezęłList.add(internalwezęł.right);
}
return root;
}
static class wezęł {
int d;
wezęł left, right;
static wezęł of(int v) {
return new wezęł(v);
}
wezęł(int v) {
this.d = v;
}
}
}