#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;
}
課題なのですが
課題なのですが
以下のソースコードの★★★の部分に追加ソースを挿入してかんせいさせたいのですが、どのようなコードを追加すればよいのでしょうか?
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 13年前
- 住所: 東海地方
- 連絡を取る:
Re: 課題なのですが
マルチポストされていると思いますので、こちらのルールなのですが相互リンクをお願いします。
お互いの掲示板の回答者が各々どのような回答が書かれているか見るために必要です。
http://detail.chiebukuro.yahoo.co.jp/qa ... 1154644206
http://vipper.2ch.net/test/read.cgi/new ... 452590952/
お互いの掲示板の回答者が各々どのような回答が書かれているか見るために必要です。
http://detail.chiebukuro.yahoo.co.jp/qa ... 1154644206
http://vipper.2ch.net/test/read.cgi/new ... 452590952/
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
Re: 課題なのですが
ソフト屋 さん
すいません、いまいちこういったサイトは使う機会が少なかったので・・・今後は気をつけていこうと思います
またこちらの問題は解決いたしました、重ねて申し訳ありませんでした
すいません、いまいちこういったサイトは使う機会が少なかったので・・・今後は気をつけていこうと思います
またこちらの問題は解決いたしました、重ねて申し訳ありませんでした