diff --git a/Programmierung2/src/BinaryTree/BinaryBaumList.java b/Programmierung2/src/BinaryTree/BinaryBaumList.java index cc6026b..4a61904 100644 --- a/Programmierung2/src/BinaryTree/BinaryBaumList.java +++ b/Programmierung2/src/BinaryTree/BinaryBaumList.java @@ -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); + } } diff --git a/Programmierung2/src/BinaryTree/JuintTeste.java b/Programmierung2/src/BinaryTree/JuintTeste.java new file mode 100644 index 0000000..9161ad8 --- /dev/null +++ b/Programmierung2/src/BinaryTree/JuintTeste.java @@ -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); + + } + +} diff --git a/Programmierung2/src/BinaryTree/Test.java b/Programmierung2/src/BinaryTree/Test.java index 9434601..b084a7a 100644 --- a/Programmierung2/src/BinaryTree/Test.java +++ b/Programmierung2/src/BinaryTree/Test.java @@ -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()); + + } diff --git a/Programmierung2/src/BinaryTree/Tree Data Structure.odt b/Programmierung2/src/BinaryTree/Tree Data Structure.odt index 9efc4d7..50c2cca 100644 Binary files a/Programmierung2/src/BinaryTree/Tree Data Structure.odt and b/Programmierung2/src/BinaryTree/Tree Data Structure.odt differ