掲示板利用宣言

 次のフォームをすべてチェックしてからご利用ください。

 私は

 題名と投稿者名は具体的に書きます。
 課題の丸投げはしません。
 ソースの添付は「HTML変換ツール」で字下げします。
 返信の引用は最小限にします。
 環境(OSとコンパイラ)や症状は具体的に詳しく書きます。
 返信の付いた投稿は削除しません。
 マルチポスト(多重投稿)はしません。

掲示板2

管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    ログ    タグ一覧

No.26324

二分探索木
投稿者---tou(2006/03/01 18:29:47)


以前にも質問をしたのですが、また問題が出てきたので教えていただけないでしょうか?

県名をキーとして木を作って県名で探索をしたいのですが、木の表示はできているのですが、探索をしたときに表示がされないというのはどういうことなのでしょうか。

ソースは、部分的ですが、
typedef struct {
    int   no;                    /* 番号 */
    char  ken[10];
    char  name[10];    /* 氏名(キー) */
} Data;

/*--- ノード ---*/
typedef struct __bnode {
    Data            data;         /* データ */
    struct __bnode  *left;            /* 左の子ノードへのポインタ */
    struct __bnode  *right;         /* 右の子ノードへのポインタ */
} BinNode;

int KENCmp(Data x, Data y){
    return(strcmp(x.ken,y.ken));
}


BinNode *IInsertNode(BinNode *p, Data x)
{
    int  cond;

    if (p == NULL) {
        p = AllocNode();
        SetBinNode(p, x, NULL, NULL);
    } else if ((cond = KENCmp(x, p->data)) == 0)
        printf("【エラー】%sは既に登録されています。\n", x.ken);
    else if (cond < 0)
        p->left  = IInsertNode(p->left, x);
    else
        p->right = IInsertNode(p->right, x);
    return (p);
}

BinNode *SSearchNode(BinNode *p, Data x)
{
    int  cond;

    if (p == NULL)
        return (NULL);                
    else if ((cond =KENCmp(x, p->data) == 0))
        return (p);          
    else if (cond < 0)
        return SSearchNode(p->left,  x);                
    else
        return SSearchNode(p->right, x);                
}
・
・
・
/*main関数*/

root = NULL;
    y=NULL;
    while( fscanf(fin, "%d  %s %s", &x.no, x.name,x.ken)!=EOF){
        
       root=InsertNode(root,x);
       y=IInsertNode(y,x);
    

        printf(" no = %d %4s %s\n", x.no, x.name,x.ken);
    }

・
・
・
case  Ssearch:  x = Read("探索", KEN);
            if ((temp = SSearchNode(y, x)) != NULL)
                PrintData(temp->data);
                        break;

という感じなのですが、どこが悪いのでしょうか。




この投稿にコメントする

削除パスワード

発言に関する情報 題名 投稿番号 投稿者名 投稿日時
<子記事> Re:二分探索木 26325 あかま 2006/03/01 19:15:06


No.26325

Re:二分探索木
投稿者---あかま(2006/03/01 19:15:06)


>((cond =KENCmp(x, p->data) == 0))
括弧閉じる位置が間違ってると思う。


バグを取ってくれという事自体もあれだけれど、実行できないソースでバグを探すのがどれだけ大変か。
例えば、バグの報告が「表示できない」だけだと、探索が成功しないのか、表示するコードに到達しないのか区別がつかない。
でも実行できないから、確かめられない。


この投稿にコメントする

削除パスワード

管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    ログ    タグ一覧