C
Chris1986
Gast
Einen schönen guten Abend!
Ich hänge hier schon den ganzen Abend an einem Problem, komme jedoch nicht auf die Lösung bzw. auf den Fehler. Es wäre sehr schön, wenn ihr euch das einmal anschauen könntet, denn ich hab alles schon mehrfach durchgekaut, kann einfach nicht entdecken, was falsch ist:
VIELEN DANK!!!
Ich hänge hier schon den ganzen Abend an einem Problem, komme jedoch nicht auf die Lösung bzw. auf den Fehler. Es wäre sehr schön, wenn ihr euch das einmal anschauen könntet, denn ich hab alles schon mehrfach durchgekaut, kann einfach nicht entdecken, was falsch ist:
Code:
public class haupt {
/**
* @param args
*/
public static void main(String[] args) {
BinTree t = new BinTree();
//Hier kann man einen Baum erstellen, mit Zahl
// Node kann man die Knoten erstellen
// und dann mit z.B. n12.left = n8 eine Verbindung zwischen
// der 12 und der 8 herstellen.
// Die Methode tree_search fügt in einen Suchbaum
// eine Zahl an der richtigen Stelle ein,
// man muss der Methode den Baum, den Wurzelknoten
// und die einzufügende Zahl übermitteln.
ZahlNode n12 = new ZahlNode(12);
ZahlNode n16 = new ZahlNode(16);
ZahlNode n8 = new ZahlNode(8);
t.root=n12;
n12.left = n8;
n12.right = n16;
t.insert(t,4);
t.insert(t,90);
//Die folgende Zeile
System.out.println(t.tree_search(t.root,4).z);
// Sollte doch äquivaltent zu dieser Zeile hier sein:
System.out.println(t.root.left.left.z);
// Diese funktioniert, die erste System.out.println(t.tree_search(t.root,4).z);
// aber leider nicht, führt zu einem Fehler beim Starten.
}
}
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 insert (BinTree tree, int a)
{
if(tree.root==null) tree.root = new ZahlNode(a);
else insert(tree.root, a);
}
public void insert (ZahlNode n, int a)
{
if (a <(Integer)n.z)
{
if (n.left==null)n.left=new ZahlNode(a);
else insert(n.left,a);
} else
{
if (n.right==null)n.right = new ZahlNode(a);
else insert (n.right, a);
}
}
public void do_something(int z) {
System.out.print(z + " ");
}
public int getNumNodes() {
return getNumNodes(root);
}
protected int getNumNodes(ZahlNode node) {
if (node == null) return 0;
return 1 + getNumNodes(node.left) + getNumNodes(node.right);
}
public ZahlNode tree_search(ZahlNode node, int a)
{
if (node == null)return null;
int v = (Integer)node.z;
if (v==a) return node;
else if (v>a) return tree_search(node.right,a);
else return tree_search(node.left,a);
}
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));
}
public static void main (String ... args) {
BinTree t = new BinTree();
ZahlNode n1 = new ZahlNode(1);
ZahlNode n2 = new ZahlNode(2);
ZahlNode n3 = new ZahlNode(3);
ZahlNode n4 = new ZahlNode(4);
ZahlNode n5 = new ZahlNode(5);
ZahlNode n6 = new ZahlNode(6);
ZahlNode n7 = new ZahlNode(7);
t.root = n1;
n1.left = n2;
n1.right = n3;
n2.left = n4;
n2.right = n5;
n3.left = n6;
n3.right = n7;
}
}
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;
}
}
VIELEN DANK!!!