C
Christian1986
Gast
Hallo, ich habe hier den Quellcode zu einem Programm, mit dem man Bäume erstellen kann und damit dann einiges machen kann.
Mit
BinTree t = new BinTree();
erstellt man den neuen baum t.
Mit
ZahlNode n16 = new ZahlNode(16);
einen neuen Knoten 16
Das angehängte beispiel funktioniert problemlos, d.h. es wird der Baum erzeugt der in der Main Klasse (haq) angegeben ist.
Erst beim Anwenden der Methode toArray, wo also der Baum in ein Array geladen wird, gibt es Probleme. Also genau gesagt nach dem Einfügen der Zeile
toArray(t);
Die Methode als solche funktioniert, nur was mache ich beim Aufruf falsch?
Danke!!
Mit
BinTree t = new BinTree();
erstellt man den neuen baum t.
Mit
ZahlNode n16 = new ZahlNode(16);
einen neuen Knoten 16
Das angehängte beispiel funktioniert problemlos, d.h. es wird der Baum erzeugt der in der Main Klasse (haq) angegeben ist.
Erst beim Anwenden der Methode toArray, wo also der Baum in ein Array geladen wird, gibt es Probleme. Also genau gesagt nach dem Einfügen der Zeile
toArray(t);
Die Methode als solche funktioniert, nur was mache ich beim Aufruf falsch?
Danke!!
Code:
public class haq {
/**
* @param args
*/
public static void main(String[] args) {
//Erstelle eine Klasse, die einen Baum übergeben bekommt
// und ihn in einer Liste abspeichert
ConsList liste = new ConsList();
liste.append("Hallo");
BinTree t = new BinTree();
ZahlNode n16 = new ZahlNode(16);
ZahlNode n8 = new ZahlNode(8);
ZahlNode n4 = new ZahlNode(4);
ZahlNode n12 = new ZahlNode(12);
ZahlNode n24 = new ZahlNode(24);
ZahlNode n20 = new ZahlNode(20);
ZahlNode n28 = new ZahlNode(28);
t.root=n16;
n16.left=n8;
n16.right=n24;
n8.right=n12;
n8.left=n4;
n24.left=n20;
n24.right=n28;
toArray(t);
}
}
public class ZahlNode {
// das Objekt, welches dem Knoten zugeordnet ist
public int z;
// die beiden Kindknoten
public ZahlNode left;
public ZahlNode right;
public ZahlNode(int z) {
this.z = z;
left = right = null;
}
}
public class BinTree
{
public ZahlNode root; // der Wurzelknoten
public BinTree() { root = null; /* leerer Baum */ }
public boolean contains(int z) { return contains(root, z); }
protected boolean contains(ZahlNode node, int z) {
if (node == null) return false;
if (node.z == z) return true;
return contains(node.left, z)
|| contains(node.right, z);
}
public void preorder() {
preorder(root);
System.out.println();
}
public void preorder(ZahlNode node) {
if (node == null) return ;
do_something(node.z);
preorder(node.left);
preorder(node.right);
}
public void inorder() {
inorder(root);
System.out.println();
}
public void inorder(ZahlNode node) {
if (node == null) return ;
inorder(node.left);
do_something(node.z);
inorder(node.right);
}
public void postorder() {
postorder(root);
System.out.println();
}
public void postorder(ZahlNode node) {
if (node == null) return ;
postorder(node.left);
postorder(node.right);
do_something(node.z);
}
// public void bfs() {
// ConsList L = new ConsList();
// L.append(root); // Beginne bei Wurzelknoten
// while (!L.isEmpty()) {// Solange es noch zu besuchende Knoten gibt..
// Node node = (Node)L.removeHead();
// do_something(node.obj); // besuche naechsten Knoten ..
// if (node.left != null) // und markiere seinen ..
// L.append(node.left); // linken Kindknoten ..
// if (node.right != null) // und seinen ..
// L.append(node.right); // rechten Kindknoten
// }
// }
public void do_something(int z) {
System.out.print(z + " ");
}
public int getNumNodes() {
return getNumNodes(root);
}
public int[] toArray(BinTree tree){
int numnodes = tree.getNumNodes();
int[] array = new int[numnodes];
int i=0;
//von oben bfs()
ConsList L = new ConsList();
L.append(root); // Beginne bei Wurzelknoten
while (!L.isEmpty()) {// Solange es noch zu besuchende Knoten gibt..
ZahlNode node = (ZahlNode)L.removeHead();
array[i] = node.z;
i++;
if (node.left != null) // und markiere seinen ..
L.append(node.left); // linken Kindknoten ..
if (node.right != null) // und seinen ..
L.append(node.right); // rechten Kindknoten
}
return array;
}
protected int getNumNodes(ZahlNode node) {
if (node == null) return 0;
return 1 + getNumNodes(node.left) + getNumNodes(node.right);
}
public int getHeight() {
return getHeight(root);
}
protected int getHeight(ZahlNode node) {
if (node == null) return 0;
if (node.left == null && node.right == null) return 0;
return 1 + Math.max(getHeight(node.left), getHeight(node.right));
}
}