ich habe es mal wieder geschafft etwas weiter zu machen mit dem Tutorial. Beziehungsweise versucht

Ich bin im Moment bei den Bäumen. Da dort aber nicht mehr gegeben ist als ein Ansatz fehlt mir der Rest. Also hab ich einfach mal ein bisschen rum probiert.
Der Code funktioniert unter Linux ohne Probleme. Jetzt hab ich das ganze einfach mal auf Windows gestartet: "baeume.exe hat ein Problem festgestellt [...]"
Also brauch ich wohl mal wieder eure Hilfe. Habe mich bei der main etwas nach dem Abschnitt Listen orientiert.
Code: Alles auswählen
#include <stdio.h>
#include <stdlib.h>
struct Address
{
int Number;
};
struct AddressTreeElement
{
struct AddressTreeElement * Superior; // übergeordnetes Element (optional)
struct AddressTreeElement * Left, * Right; // Nachfolgende Elemente
struct Address Data;
};
struct AddressTreeRoot
{
struct AddressTreeElement * Root;
int Elements;
};
struct AddressTreeRoot * newAddressTree();
struct AddressTreeElement * newTreeElement(struct AddressTreeRoot * root, struct Address data);
void insertTreeNode(struct AddressTreeRoot * root, struct AddressTreeElement * newTreeElem);
int BaumAusgabe(struct AddressTreeElement * root);
struct AddressTreeElement * searchKey(struct AddressTreeElement * root, struct Address key);
int main()
{
struct AddressTreeRoot * tree;
struct AddressTreeElement * element;
struct Address addy;
tree = newAddressTree();
addy.Number = 1;
element = newTreeElement(tree, addy);
addy.Number = 7;
element = newTreeElement(tree, addy);
addy.Number = 4;
element = newTreeElement(tree, addy);
BaumAusgabe(tree->Root);
return 0;
}
struct AddressTreeElement * newTreeElement(struct AddressTreeRoot * root, struct Address data)
{
struct AddressTreeElement * newNode = (struct AddressTreeElement *) malloc( sizeof( struct AddressTreeElement ) );
//Muss ja nach irgendetwas sortiert werden
newNode->Data = data;
insertTreeNode(root, newNode);
return newNode;
}
struct AddressTreeRoot * newAddressTree()
{
struct AddressTreeRoot * newTree = (struct AddressTreeRoot *) malloc( sizeof( struct AddressTreeRoot ) );
newTree->Root = NULL;
return newTree;
}
void insertTreeNode(struct AddressTreeRoot * root, struct AddressTreeElement * newTreeElem)
{
struct AddressTreeElement * y = NULL;
struct AddressTreeElement * x = root->Root;
while (x != NULL)
{
y = x;
if (newTreeElem->Data.Number < x->Data.Number)
{
x = x->Left;
}
else
{
x = x->Right;
}
}
newTreeElem->Superior = y;
if (y == NULL)
{
root->Root = newTreeElem;
}
else
{
if (newTreeElem->Data.Number < y->Data.Number)
{
y->Left = newTreeElem;
}
else
{
y->Right = newTreeElem;
}
}
}
int BaumAusgabe(struct AddressTreeElement * root)
{
if (!root) return 0;
BaumAusgabe(root->Left);
printf("key von X: %d\n", root->Data.Number);
BaumAusgabe(root->Right);
return 1;
}
struct AddressTreeElement * searchKey(struct AddressTreeElement * root, struct Address key)
{
//kommt noch..
return root;
}