私は教師からバイナリツリーを反映するC言語の関数を書くように求められています。それはツリーを逆転させることを意味します。 解決策が私には意味をなさないので、私はこの質問に苦労してきました。 我々が使用するデータ構造体は以下の通りです:このCコードはバイナリツリーを元の場所に戻す方法を教えてください。
typedef struct nodo {
int valor;
struct nodo *esq, *dir;
} *ABin;
、溶液がある:ここ
void mirror (ABin *a) {
ABin c = *a;
if (c == NULL);
else {
ABin e = c -> esq;
ABin d = c -> dir;
c -> esq = d;
c -> dir = e;
mirror (&(c -> esq));
mirror (&(c -> dir));
}
}
私の最大の懸念は、ポインタかの使用です。なぜ、私たちが関数を再帰的に呼び出すときにesq
とdir
がstruct nodo
型へのポインタである場合、&
を使用しなければならないのか理解できませんか?あなたはESQとDIRを見ることができるようにあなたが唯一
struct node {
struct node *prev;
struct node *next;
int key;
char payload[123];
};
void mirror(struct node *ptr)
{
struct node *tmp;
if (!ptr) return;
tmp = node->prev;
node->prev = node->next;
node->next= tmp;
mirror(node->prev);
mirror(node->next);
}
あなたは明確な質問がありません。あなたはタイトルに入れることができます。 – Raphael
'typedef'は明らかに最大の混乱のために書かれています。 'ABin'は' struct nodo * 'なので、' ABin * 'パラメータは' struct nodo ** 'です。 (実際のコードでは絶対にしないでください) – Ryan
'if(c == NULL); – ikegami