ERLEDIGT
NEIN
NEIN
ANTWORTEN
3
3
ZUGRIFFE
873
873
EMPFEHLEN
-
Das werde ich doch gleich mal ausnutzen. *g*
Zitat von Thomas Darimont
Also di Aufgabe besteht darin, einen einfachen Binärbaum zu implementieren. Der soll im Groben nur insert und preorder output beherrschen. Das problem ist, es gibt eine vorgefertigte Klasse, die ich als Datenstruktur verwenden soll. Das ist auch nicht unbedingt das Problem, ehr das Einfügen in eine solche. meine Kongrete Frage dazu ist: wenn ich durch den Baum gegangen bin, und meinen Key+Info eingefügt habe, wie setzte ich meinen "pointer" wieder auf die Wurzel?
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
public void insert(String key, Object info) { while (wurzel != null) { if (Integer.parseInt(wurzel.getKey()) > Integer.parseInt(key)) wurzel = wurzel.getLeft(); else wurzel = wurzel.getRight(); } wurzel = new TreeNode(key, info); }
Dass der Key ein String ist, wurde schon vorgegeben, aber sollte nicht das Problem sein
Wurzel ist mein statisches Objekt aus der Klasse (fest vorgegeben):
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67
public class TreeNode { // Instance variables: private String key; private Object info; // Daten private ergibt mehr Aufwand(set- und // get-Methoden) private TreeNode left; // Referenzen auf Soehne private TreeNode right; // Simple constructors: public TreeNode(String k, Object inf) { this(k, inf, null, null); } public TreeNode(String k, Object inf, TreeNode l, TreeNode r) { key = k; info = inf; left = l; right = r; } // Accessor methods: public String getKey() { // gibt den key of this TreeNode zurueck return key; } public Object getInfo() { // gibt die Daten des Knotens zurueck return info; } public TreeNode getLeft() { // gibt den linken Verkettungszeiger des Knotens // zurueck return left; } public TreeNode getRight() { // gibt den rechten Verkettungszeiger des // Knotens zurueck return right; } // Modifier methods: aendere Knoteninhalte und Pointer public void setKey(String nk) { key = nk; } public void setInfo(Object newinf) { info = newinf; } public void setNextLeft(TreeNode NextLeft) {// setzt in this treenode den // LeftPointer NextLeft left = NextLeft; } public void setNextRight(TreeNode NextRight) {// setzt in this treenode // den RightPointer // NextRight right = NextRight; } }
Ich hoffe ihr könnt mir weiterhelfen, ich habe schon mehere Varianten ausprobiert, aber keine hat das gewünschte ergebnis gebracht.
Ciao
KodakGeändert von kodak (06.07.06 um 11:30 Uhr)
-
Vielen Dank für eure umfangreiche Hilfe, ihr seid Spitze
-
Keine Ursache
MfG
illaX
-
10.07.06 13:00 #4
- Registriert seit
- Jun 2002
- Ort
- Saarbrücken (Saarland)
- Beiträge
- 9.885
- Blog-Einträge
- 29
Hallo!
Hier ein Beispiel für die Implementierung eines Binärbaums und die verschiedenen Traversierungs (Durchlauf) Techniken.
Traversierung via:
PreOrder
InOrder
PostOrder
LevelOrder
Schau mal hier:
Code java:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174
/** * */ package de.tutorials; import java.util.LinkedList; import java.util.Queue; /** * @author Thomas.Darimont * */ public class BinaryTreeExample { /** * @param args */ public static void main(String[] args) { TreeNode root = new TreeNode(100, "F"); TreeNode nodeB = root.insertIterative(new TreeNode(50, "B")); TreeNode nodeG = root.insertIterative(new TreeNode(150, "G")); TreeNode nodeA = nodeB.insertIterative(new TreeNode(25, "A")); TreeNode nodeD = nodeB.insertIterative(new TreeNode(65, "D")); TreeNode nodeI = nodeG.insertIterative(new TreeNode(200, "I")); TreeNode nodeC = nodeD.insertIterative(new TreeNode(60, "C")); TreeNode nodeE = nodeD.insertIterative(new TreeNode(70, "E")); TreeNode nodeH = nodeI.insertIterative(new TreeNode(190, "H")); System.out.println("###############"); System.out.println("printPreOrder"); TreeNode.printPreOrder(root); System.out.println("###############"); System.out.println("printInOrder"); TreeNode.printInOrder(root); System.out.println("###############"); System.out.println("printPostOrder"); TreeNode.printPostOrder(root); System.out.println("###############"); System.out.println("printLevelOrder"); TreeNode.printLevelOrder(root); } static class TreeNode { int key; Object data; TreeNode left, right; public TreeNode(int key, Object data) { this.key = key; this.data = data; } public Object getData() { return data; } public void setData(Object data) { this.data = data; } public int getKey() { return key; } public TreeNode getLeft() { return left; } public void setLeft(TreeNode left) { this.left = left; } public TreeNode getRight() { return right; } public void setRight(TreeNode right) { this.right = right; } public TreeNode insertRecursive(TreeNode node) { if (node.key < this.key) { if (this.left != null) { this.left.insertRecursive(node); } else { this.left = node; } } else { if (this.right != null) { this.right.insertRecursive(node); } else { this.right = node; } } return node; } public TreeNode insertIterative(TreeNode node) { TreeNode currentNode = this; while (currentNode != null) { if (node.key < currentNode.key) { if (currentNode.left == null) { currentNode.left = node; break; } else { currentNode = currentNode.left; } }else if (node.key > currentNode.key) { if (currentNode.right == null) { currentNode.right = node; break; } else { currentNode = currentNode.right; } } } return node; } public String toString() { return this.key + ": " + this.data; } public static void printPreOrder(TreeNode baseNode) { System.out.println(baseNode); if (baseNode.left != null) { printPreOrder(baseNode.left); } if (baseNode.right != null) { printPreOrder(baseNode.right); } } public static void printInOrder(TreeNode baseNode) { if (baseNode.left != null) { printInOrder(baseNode.left); } System.out.println(baseNode); if (baseNode.right != null) { printInOrder(baseNode.right); } } public static void printPostOrder(TreeNode baseNode) { if (baseNode.left != null) { printPostOrder(baseNode.left); } if (baseNode.right != null) { printPostOrder(baseNode.right); } System.out.println(baseNode); } public static void printLevelOrder(TreeNode node) { Queue<TreeNode> queue = new LinkedList<TreeNode>(); queue.add(node); while (!queue.isEmpty()) { TreeNode currentNode = queue.poll(); System.out.println(currentNode); if (null != currentNode.left) { queue.add(currentNode.left); } if (null != currentNode.right) { queue.add(currentNode.right); } } } } }
Ausgabe:
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44
############### printPreOrder 100: F 50: B 25: A 65: D 60: C 70: E 150: G 200: I 190: H ############### printInOrder 25: A 50: B 60: C 65: D 70: E 100: F 150: G 190: H 200: I ############### printPostOrder 25: A 60: C 70: E 65: D 50: B 190: H 200: I 150: G 100: F ############### printLevelOrder 100: F 50: B 150: G 25: A 65: D 200: I 60: C 70: E 190: H
Gruß TomJava rocks!
How to become a good Java Programmer?
Does IT in Java and .Net
The only valid measurement of code quality: WTFs / minute
Blog
Xing
Twitter
Ähnliche Themen
-
[C++] Probleme bei Implementierung eines eigenen Datei-Archiv-Formats
Von _Grubi im Forum C/C++Antworten: 2Letzter Beitrag: 05.01.10, 18:22 -
Schwierigkeiten bei der Implementierung/Entwurf eines Algorithmusses
Von Ozzy Ozborn im Forum C/C++Antworten: 2Letzter Beitrag: 02.11.07, 13:14 -
IBM Artikel zeigt Implementierung eines Zustandsautomaten mit Ruby on Rails
Von Thomas Darimont im Forum Coders TalkAntworten: 0Letzter Beitrag: 15.03.07, 01:07 -
Implementierung eines Upload
Von soa im Forum PHPAntworten: 4Letzter Beitrag: 23.06.05, 21:53 -
Implementierung eines Terminplans in Java
Von PPhilipp im Forum JavaAntworten: 5Letzter Beitrag: 21.06.04, 16:06






Zitieren

Login





