Advertisement
Guest User

Untitled

a guest
Jan 24th, 2017
157
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 8.39 KB | None | 0 0
  1. /*
  2.     Aufgabe 4) Bäume
  3.  
  4.     In der Klasse IntTree haben Sie eine Baumimplementierung gegeben, die einen
  5.     sortierten Binärbaum abbildet. Jede Veränderung des Baumes durch eine
  6.     Methode muss gewährleisten, dass dieser sortiert bleibt. Dazu sollen Sie
  7.     folgende zusätzliche Methoden implementieren:
  8.  
  9.     - add:              Fügt einen Knoten in den Baum ein. Werden folgende
  10.     (bereits gegeben)   Elemente {12,4,6,15,1,13,5,14} nacheinander in den Baum
  11.                         eingefügt, wird folgender Baum aufgebaut:
  12.                                                  12
  13.                                               /      \
  14.                                             4         15
  15.                                           /   \      /
  16.                                          1     6   13
  17.                                               /      \
  18.                                              5        14
  19.     - countNodes:       Liefert die Anzahl aller Knoten im Baum zurück. Wird
  20.                         ohne Parameter aufgerufen.
  21.     - countLeaves:      Liefert die Anzahl der Blattknoten zurück. Wird ohne
  22.                         Parameter aufgerufen.
  23.     - height:           Liefert die Höhe des Baumes zurück. Der leere Baum hat
  24.                         die Höhe 0. Hat der Baum nur einen Knoten (Wurzel), dann
  25.                         hat er die Höhe 1. Mit jeder zusätzlichen Stufe von
  26.                         Nachfolgern erhöht sich die Höhe um 1. Der oben gezeigte
  27.                         Baum hat die Höhe 4.
  28.     - printLeaves:      Diese Methode gibt die Elemente der Blätterknoten aus,
  29.                         wobei das linke Blatt immer vor dem rechten Blatt
  30.                         ausgegeben wird. Verwenden Sie an entsprechender Stelle
  31.                         für die Ausgabe -> System.out.println(this.elem);
  32.     - printInOrderUp:   Diese Methode gibt alle Elemente in aufsteigender
  33.                         Reihenfolge aus.
  34.                         Verwenden Sie an entsprechender Stelle für die
  35.                         Ausgabe -> System.out.println(this.elem);
  36.     - printInOrderUpSub:Diese Methode gibt alle Elemente eines Teilbaums in
  37.                         aufsteigender Reihenfolge aus. Dazu wird der Methode ein
  38.                         Element übergeben, welches dem Wurzelknoten des
  39.                         Teilbaums entspricht. Nun wird der komplette Teilbaum
  40.                         inklusive Wurzel ausgegben. Verwenden Sie an
  41.                         entsprechender Stelle für die
  42.                         Ausgabe -> System.out.println(this.elem);
  43.     - printPostOrder:   Diese Methode gibt alle Elemente in der sogenannten
  44.                         Post-Order aus. Die Post-Order für den oben abgebildeten
  45.                         Baum ergibt folgende Reihenfolge (1,5,6,4,14,13,15,12).
  46.                         Verwenden Sie an entsprechender Stelle für die
  47.                         Ausgabe -> System.out.println(this.elem);
  48.     - printPreOrder:    Diese Methode gibt alle Elemente in der sogenannten
  49.                         Pre-Order aus. Die Pre-Order für den oben abgebildeten
  50.                         Baum ergibt folgende Reihenfolge (12,4,1,6,5,15,13,14).
  51.                         Verwenden Sie an entsprechender Stelle für die
  52.                         Ausgabe -> System.out.println(this.elem);
  53.  
  54.     Zusatzfragen:
  55.     1. Wie könnte man vorgehen, wenn man einen Knoten in den Baum einfügen
  56.        möchte. Reicht es, den Knoten einzuhängen, oder müssen zusätzliche
  57.        Operationen durchgeführt werden?
  58.  
  59. */
  60. public class Aufgabe4 {
  61.  
  62.     public static void main(String[] args) {
  63.         IntTree tree = new IntTree();
  64.         tree.add(12);
  65.         tree.add(18);
  66.         tree.add(11);
  67.         tree.add(9);
  68.         tree.add(4);
  69.         tree.add(6);
  70.         tree.add(2);
  71.         tree.add(19);
  72.         System.out.println("Should be 3");
  73.         System.out.println(tree.countLeaves());
  74.         System.out.println("should be 8");
  75.         System.out.println(tree.countNodes());
  76.     }
  77. }
  78.  
  79. class IntTree {
  80.  
  81.     private class Node {
  82.         int elem;
  83.         Node left = null;
  84.         Node right = null;
  85.  
  86.         Node(int elem) {
  87.             this.elem = elem;
  88.         }
  89.  
  90.         void add(int elem) {
  91.             if (elem < this.elem) {
  92.                 if (this.left == null) {
  93.                     this.left = new Node(elem);
  94.                 } else {
  95.                     this.left.add(elem);
  96.                 }
  97.             } else {
  98.                 if (this.right == null) {
  99.                     this.right = new Node(elem);
  100.                 } else {
  101.                     this.right.add(elem);
  102.                 }
  103.             }
  104.         }
  105.  
  106.         int countNodes() {
  107.             if (this.left == null && this.right == null) { return 1; }
  108.  
  109.             if (this.left == null) { return 1 + this.right.countNodes(); }
  110.             if (this.right == null) { return 1 + this.left.countNodes(); }
  111.  
  112.             return 1 + this.left.countNodes() + this.right.countNodes();
  113.         }
  114.  
  115.         int countLeaves() {
  116.             if (this.left == null && this.right == null) { return 1; }
  117.  
  118.             return (this.left == null ? 0 : this.left.countLeaves()) + (this.right == null ? 0 : this.right.countLeaves());
  119.         }
  120.  
  121.         int height() {
  122.             if (this.left == null && this.right == null) { return 1; }
  123.  
  124.             if (this.left == null) { return 1 + this.right.height(); }
  125.             if (this.right == null) { return 1 + this.left.height(); }
  126.  
  127.             return 1 + Math.max(this.left.height(), this.right.height());
  128.         }
  129.  
  130.         void printLeaves() {
  131.             if (this.left == null && this.right == null) {
  132.                 System.out.println(this.elem);
  133.             }
  134.             if (this.left != null) {
  135.                 this.left.printLeaves();
  136.             }
  137.             if (this.right != null) {
  138.                 this.right.printLeaves();
  139.             }
  140.         }
  141.  
  142.         void printInOrderUp() {
  143.             if (this.left != null) {
  144.                 this.left.printInOrderUp();
  145.             }
  146.             System.out.println(this.elem);
  147.             if (this.right != null) {
  148.                 this.right.printInOrderUp();
  149.             }
  150.         }
  151.  
  152.         void printInOrderUpSub(int elem) {
  153.             if (elem == this.elem) {
  154.                 this.printInOrderUp();
  155.             } else if (elem > this.elem) {
  156.                 this.right.printInOrderUpSub(elem);
  157.             } else {
  158.                 this.left.printInOrderUpSub(elem);
  159.             }
  160.  
  161.         }
  162.  
  163.         void printPostOrder() {
  164.             if (this.left != null) {
  165.                 this.left.printPostOrder();
  166.             }
  167.             if (this.right != null) {
  168.                 this.right.printPostOrder();
  169.             }
  170.             System.out.println(this.elem);
  171.         }
  172.  
  173.         void printPreOrder() {
  174.             System.out.println(this.elem);
  175.             if (this.left != null) {
  176.                 this.left.printPreOrder();
  177.             }
  178.             if (this.right != null) {
  179.                 this.right.printPreOrder();
  180.             }
  181.         }
  182.     }
  183.  
  184.     private Node root = null;
  185.  
  186.     public void add(int elem) {
  187.         if (empty()) {
  188.             this.root = new Node(elem);
  189.         } else {
  190.             this.root.add(elem);
  191.         }
  192.     }
  193.  
  194.     public boolean empty() {
  195.         return this.root == null;
  196.     }
  197.  
  198.     public int countNodes() {
  199.         return this.empty() ? 0 : this.root.countNodes();
  200.     }
  201.  
  202.     public int countLeaves() {
  203.         return this.root == null ? 0 : this.root.countLeaves();
  204.     }
  205.  
  206.     public int height() {
  207.         return this.root == null ? 0 : this.root.height();
  208.     }
  209.  
  210.     public void printLeaves() {
  211.         if (this.root != null) {
  212.             this.root.printLeaves();
  213.         }
  214.     }
  215.  
  216.     public void printInOrderUp() {
  217.         if (this.root != null) {
  218.             this.root.printInOrderUp();
  219.         }
  220.     }
  221.  
  222.     public void printInOrderUpSub(int elem) {
  223.         if (this.root != null) {
  224.             this.root.printInOrderUpSub(elem);
  225.         }
  226.     }
  227.  
  228.     public void printPostOrder(){
  229.         if (this.root != null) {
  230.             this.root.printPostOrder();
  231.         }
  232.     }
  233.  
  234.     public void printPreOrder(){
  235.         if (this.root != null) {
  236.             this.root.printPreOrder();
  237.         }
  238.     }
  239.  
  240.     public static void main(String[] args) {
  241.         // Aufgabe4.main(new String[0]);
  242.     }
  243. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement