was neues

master
obaya 2024-08-20 16:08:17 +02:00
parent 6ea3a48474
commit 985ffab864
4 changed files with 124 additions and 66 deletions

View File

@ -2,15 +2,27 @@ package BinaryTree;
public class BinaryBaumList {
Node root;
public void addFirstElement(int value) {
Node node = new Node(); //1. erstelle ein Node
node.value = value; // 2. gib dieser Node ein Value
System.out.println("Erste Element: " + root.value);
private int findTreeHeightRekursiv(Node temp) {
if (temp == null)
return -1;
int left_subTree = findTreeHeightRekursiv(temp.left);
int right_subTree = findTreeHeightRekursiv(temp.right);
if (left_subTree > right_subTree)
return 1 + left_subTree;
return 1 + right_subTree;
}
public int getHeight() {
return findTreeHeightRekursiv(root);
}
private void additerativ(int value) {
private void additerativ(int value) {
// erzeuge eine neue knote
Node newNode = new Node();
// setze in knote einen Wert
@ -19,40 +31,42 @@ public class BinaryBaumList {
newNode.left = null;
// ersetze rechte Knote auf Null
newNode.right = null;
// wenn meine Liste leer ist
// wenn meine Liste leer ist
if (root == null) {
this.root = newNode;
return;
}
// Wenn sie nicht leer!
// temp root, um einfacher zu suchen
Node temp = root;
// da mein Temp bis null Knote läuft,
// speichere ich seinen vorhängieren Wert
Node merker = temp;
while(temp != null) {
Node merker = temp;
while (temp != null) {
// speichere temp vorhängieren Wert
merker = temp;
// wenn soll ich die linke Seite betrachten
if (value < temp.value)
if (value < temp.value)
temp = temp.left;
// wenn nein soll ich die rechte Seite betrachten
else
temp = temp.right;
else
temp = temp.right;
}
// so wenn ich ganz unten bin, soll ich sehen, ob ich die Knote rechts oder linke einsetzen soll
// so wenn ich ganz unten bin, soll ich sehen, ob ich die Knote rechts oder
// linke einsetzen soll
// Wenn ja, Knote auf der Linke Seite einsetzen
if (value < merker.value)
merker.left =newNode;
if (value < merker.value)
merker.left = newNode;
// Wenn nein, Knote auf der rechte Seite einsetzen
else
merker.right =newNode;
else
merker.right = newNode;
}
private void addRekursiv(Node temp, int value) {
// erzeuge eine neue knote
Node newNode = new Node();
// setze in knote einen Wert
@ -73,14 +87,14 @@ public class BinaryBaumList {
if (temp.left == null) {
// erstze die Knote
temp.left = newNode;
System.out.println("Linke Knote: " +temp.left.value);
System.out.println("Linke Knote: " + temp.left.value);
}
// wenn mein Temp die Knote null nicht erreicht hat
else {
// laufe weiter
addRekursiv(temp.left, value);
}
}
// wenn die Value größer als die Root
// also die rechte Seite betrachten
@ -88,49 +102,72 @@ public class BinaryBaumList {
if (temp.right == null) {
// erstze die Knote
temp.right = newNode;
System.out.println("Rechte Knote: " +temp.right.value);
System.out.println("Rechte Knote: " + temp.right.value);
} else {
//laufe Weiter
// laufe Weiter
addRekursiv(temp.right, value);
}
}
}
public void addElement(int value) {
//additerativ(value);
addRekursiv(root,value);
// additerativ(value);
addRekursiv(root, value);
}
public void printRoot() {
Node temp = root;
System.out.println("Die Linke Elemente: ");
while(temp != null) {
System.out.print(temp.value + " ");
temp =temp.left;
}
System.out.println();
temp = root;
System.out.println("Die Rechte Elemente: ");
while (temp != null) {
System.out.print(temp.value + " ");
temp = temp.right;
}
}
// public void preorder() {
// Node temp = root;
// if (temp != null)
// System.out.println(temp.value);
// temp = temp.
// while (temp.left != null || temp.right != null) {
// if (temp.left != null) {
// temp = temp.left;
// System.out.println(temp.value);
// }
// }
// }
private int findMinRekursiv(Node temp) {
if (temp.left == null)
return temp.value;
return findMinRekursiv(temp.left);
}
private int findMinIterativ(Node temp) {
while (temp.left != null)
temp = temp.left;
return temp.value;
}
public int findMin() {
return findMinRekursiv(root);
// return findMinIterativ(root);
}
private int findMaxRekursiv(Node temp) {
// // Wenn es kein rechtes Kind gibt, ist dies das Maximum
if (temp.right == null)
return temp.value;
// Rekursiv weiter nach rechts gehen
return findMaxRekursiv(temp.right);
}
private int findMaxIterativ(Node temp) {
while (temp.right != null)
temp = temp.right;
return temp.value;
}
public int findMax() {
// Es gibt keine Elemente
if (root == null)
return -1;
// Wenn ja, dann hat root den Max Wert
if (root.right == null)
return root.value;
// return findMaxRekursiv(root);
return findMaxIterativ(root);
}
}

View File

@ -0,0 +1,23 @@
package BinaryTree;
import static org.junit.Assert.assertEquals;
import static org.junit.jupiter.api.Assertions.*;
import org.junit.jupiter.api.Test;
class JuintTeste {
@Test
void test() {
BinaryBaumList b1 = new BinaryBaumList();
b1.addElement(15);
b1.addElement(6);
b1.addElement(3);
b1.addElement(9);
b1.addElement(8);
b1.addElement(20);
b1.addElement(25);
}
}

View File

@ -3,17 +3,15 @@ package BinaryTree;
public class Test {
public static void main(String[] args) {
Node n1 = new Node();
BinaryBaumList b1 = new BinaryBaumList();
b1.addElement(10);
b1.addElement(15);
b1.addElement(6);
b1.addElement(3);
b1.addElement(9);
b1.addElement(20);
b1.addElement(2);
b1.addElement(1);
b1.addElement(5);
b1.addElement(22);
b1.addElement(23);
System.out.println(b1.getHeight());
}