2017-01-01 6 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; 

私が実装する必要がある機能は、ノードとしてではなくツリーとしてパラメータを必要とするということです。Cのバイナリツリーでの出現をカウントする

int count_occurrences(Tree t, int k){} 

私は、最初のパラメータはNode型であった場合は、この機能を実装する方法を知っているが、それは私が再帰呼び出しで型ツリーパラメータを渡すために、どのようにそれを把握することはできません型ツリーを必要とするため。

編集:また別の問題があります。他のファイル(学校プロジェクト)で宣言されているので、構造体フィールドに直接アクセスすることはできません。私は一つの簡単な方法は、ヘルパー関数を作成することです

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

あなたはフロントエンドを持つことができますツリーをとる関数と、ノードをとる再帰関数です。フロントエンドからのルートノードで再帰関数を呼び出します。 –

+2

なぜ再帰呼び出しが必要ですか?あなたが終わりに達するまでルートから始まるツリーをループするだけです(おそらく 'right' beeing NULLで示されます)。また、何かがtypedefを持つポインタ型であるという事実を隠すことは、混乱を招く可能性があります。 – Unimportant

答えて

2

、ツリーのルートを取得するようないくつかの機能へのアクセスを持って左またはノードなどの右の子:

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

structフィールドに直接アクセスすることはできません。これらのフィールドは別のファイルにあります(移動できません。これは学校用です)。私は木のルートを取得する、ルートまたは右の子の左の子を取得するようないくつかの関数にアクセスする –

+1

構造体フィールドに直接アクセスできないということはどういう意味ですか?どのファイルが定義されているかは関係ありません。 –

+0

たとえば、t-> rootはできませんが、関数root(t)を呼び出す必要があります –

関連する問題