以下のソースコードの★★★の部分に追加ソースを挿入してかんせいさせたいのですが、どのようなコードを追加すればよいのでしょうか?
以下のソースコードの★★★の部分に追加ソースを挿入してかんせいさせたいのですが、どのようなコードを追加すればよいのでしょうか? #include <stdio.h> #include <stdlib.h> #include <string.h> struct tnode { struct tnode *left; char name[256]; struct tnode *right; }; // ノード構造体を NODE型と再定義 typedef struct tnode NODE; NODE *SearchAndDestroy(NODE *p, char *dat); void DeleteTree(NODE *p); NODE *gentree(NODE *, char *); void treewalk(NODE *); NODE *talloc(void); int main(int argc, char *argv[]) { char dat[256], command[256]; NODE *root; root = NULL; while(1) { printf("command: "); scanf("%s", command); // コマンド文字列の1文字目により場合分け switch(command[0]) { case 'i': // 1ノードの追加 printf("Name? "); scanf("%s", dat); root = gentree(root, dat); break; case 'w': // 木のトラバーサル printf("Tree:\n"); treewalk(root); break; case 'd': // 部分木の削除 printf("Name? "); scanf("%s", dat); root = SearchAndDestroy(root, dat); break; case 'q': // プログラム終了 exit(0); break; default: // ヘルプ表示 printf("i: input / w: walk / "); printf("d: delete\n"); } } } // // 削除対象部分木の根ノードの探索と削除関数の起動 // // [引数] // p: 起点ノードへのポインタ // dat: 削除対象部分木の根ノードのデータ // [戻り値] // p が NULLのとき:NULL // p 以下を削除したとき:NULL // それ以外:p をそのまま返す // NODE *SearchAndDestroy(NODE *p, char *dat) { if (p == NULL) return p; if (strcmp(dat, p->name) == 0) { DeleteTree(p); return NULL; } if (strcmp(dat, p->name) < 0) { p->left = SearchAndDestroy(p->left, dat); return p; } else { p->right = SearchAndDestroy(p->right, dat); return p; } } // // 特定ノードを根とする部分木の削除 // // [引数] // p: 起点ノードへのポインタ // [戻り値] // なし // void DeleteTree(NODE *p) { ★★★★★★★★★★★★ } // // ノード追加 // // [引数] // p: 起点ノードへのポインタ // w: 記入するデータ // [戻り値] // ノード作成時:作成したノード // それ以外:p をそのまま返す // NODE *gentree(NODE *p, char w[]) { if (p == NULL) { p = talloc(); strcpy(p->name, w); p->left = p->right = NULL; } else if (strcmp(w, p->name) < 0) p->left = gentree(p->left, w); else p->right = gentree(p->right, w); return p; } // // 木のトラバーサル // // [引数] // p: 起点ノード // [戻り値] // なし // void treewalk(NODE *p) { if (p != NULL) { treewalk(p->left); printf("%s\n", p->name); treewalk(p->right); } } // // ノード新規作成 // // [引数] // なし // [戻り値] // 作成したノードへのポインタ // NODE *talloc(void) { NODE *p; p = (NODE *)malloc(sizeof(NODE)); if (p == NULL) { fprintf(stderr, "Cannot allocate memory.\n"); exit(1); } return p; }
C言語関連・140閲覧・250