# Preorder Traversierung von Bäumen



## stEEdZ (27. Januar 2008)

Hallo allerseits,
bin hier gerade am lernen und steh leider etwas auf dem Schlauch.

Es geht um eine Preorder Traversierung:

```
typedef struct node {
        int value;
        struct node * left;
        struct node * right;
}Node;

void evaluate(int value)
{
     printf("%d",value); //nur für Test
}

void traverse(Node* subtree)
{
     evaluate(subtree->value);
     
     if(subtree->left != 0) traverse(subtree->left);
     if(subtree->right != 0) traverse(subtree->right);
}
```


Verstehe alles soweit ganz gut, auch den Code.. 
Was ich leider gerade überhaupt nicht verstehe ist, wie müsste dazu nun die Main-Funktion aussehen? 

Im Anhang ist der dazugehörige Baum!

vielen Dank für eure Hilfe
mfg
stEEdZ


----------



## stEEdZ (28. Januar 2008)

Bitte um Hilfe, ist echt wichtig für mich!


----------



## sheel (28. Januar 2008)

Hi

einfach traverse mit der Wurzel (dem "obersten" Knoten( aufrufen

gruß


----------



## stEEdZ (28. Januar 2008)

Hallo sheel,

zunächst einmal danke für die Antwort! 

Ok, das is mir soweit klar...

Aber davor muss ich doch erstmal irgendwo den Baum in nem Array oder irgendwas haben. 
Dann noch die jeweiligen Wurzeln angeben oder nich?

Sowas wie:

```
Node * root = h;  //für die Wurzel?
```

Und dann noch irgendwie die Kinder mit (2n) und (2n+1)?

Du merkst ich komm grad gar nich klar 

Danke im Vorraus
mfg
stEEdZ


----------



## deepthroat (28. Januar 2008)

Hi.





stEEdZ hat gesagt.:


> Aber davor muss ich doch erstmal irgendwo den Baum in nem Array oder irgendwas haben.


Nein. Du müßtest den Baum als Baum haben.


stEEdZ hat gesagt.:


> Dann noch die jeweiligen Wurzeln angeben oder nich?


Ein Baum hat genau eine Wurzel - so wie üblich.

Du müßtest den Baum erstmal bauen. Z.B.
	
	
	



```
Node *root = new Node();
root->value = 5;

root->left = new Node();
root->left->value = 3;
root->right = new Node();
root->right->value = 6;
```
Zum Schluß natürlich ordentlich mit delete den Speicher wieder freigeben...

Du solltest dir dafür Funktionen schreiben, die einen neuen Knoten erstellen und ihn initialisieren. Und eine Funktion den (Teil-)Baum zu zerstören und alle Knoten darin freizugeben.

Gruß


----------



## stEEdZ (28. Januar 2008)

AHHH ok jetzt klingelts! 

vielen Dank


----------

