2017-01-01 4 views
0
struct tree{ 
    struct node* root; 
}; 

typedef struct tree* Tree; 

struct node{ 
    int key; 
    struct node* left; 
     struct node* right; 
}; 
typedef struct node* node; 

Mein Problem ist, dass die Funktion, die ich implementieren muss, als ein Parameter ein Baum und kein Knoten erfordert.Anzahl der Vorkommen in Binärbaum in C

int count_occurrences(Tree t, int k){} 

Ich weiß, wie diese Funktion zu implementieren, wenn die ersten Parameter des Typ Knoten sind, aber da es eine Art Baum benötigt, kann ich es nicht herausfinden, wie die Art Baum-Parameter in den rekursiven Aufrufen zu übergeben.

EDIT: Auch gibt es ein anderes Problem. Ich kann nicht direkt auf Strukturfelder zugreifen, da sie in einer anderen Datei (Schulprojekt) deklariert sind. Ich habe Zugriff auf einige Funktionen wie die Wurzel eines Baumes immer, links oder rechts Kind eines Knotens etc

Tree newtree(); 
int treeempty(Tree t); 
Node root(Tree t); 
int readInfo(Node v); 
void setInfo(Node v, int x); 
Node leftChild(Node v); 
Node rightChild(Node v); 
+3

Sie können ein Frontend haben Funktion, die einen Baum und eine rekursive Funktion benötigt, die einen Knoten übernimmt. Rufen Sie die rekursive Funktion mit dem Wurzelknoten vom Frontend auf. –

+2

Warum brauchen Sie rekursive Aufrufe? Einfach den Baum von der Wurzel bis zum Ende durchfahren (was wahrscheinlich durch "rechts" als NULL angezeigt wird). Auch das Verbergen der Tatsache, dass etwas ein Zeigertyp mit einem Typedef ist, kann verwirrend sein. – Unimportant

Antwort

2

Eine einfache Art und Weise wird eine Hilfsfunktion zu erstellen:

int count_occurrences_helper(node d, int k) { 
    /* You already know how to implement this. */ 
} 

int count_occurrences(Tree t, int k) { 
    return count_occurrences_helper(t->root, k); 
} 
+0

Ich kann nicht direkt auf Strukturfelder zugreifen, da sie sich in einer anderen Datei befinden c (kann sie nicht verschieben, dies ist für die Schule). Ich habe Zugriff auf einige Funktionen wie die Wurzel eines Baumes erhalten, links Kind des Stammes oder des rechten Kindes –

+1

Was meinst du, dass Sie nicht direkt auf Strukturfelder zugreifen können? Es spielt keine Rolle, in welcher Datei sie definiert sind. –

+0

zum Beispiel kann ich t-> root nicht tun, aber ich muss die Funktion root (t) aufrufen –

Verwandte Themen