【掲示板ご利用上の注意】

 ※題名は具体的に!
 ※学校の課題の丸投げ禁止!
 ※ソースの添付は「HTML変換ツール」で字下げ!
 ※返信の引用は最小限に!
 ※環境(OSとコンパイラ)や症状は具体的に詳しく!
 ※マルチポスト(多重投稿)は慎んで!

 詳しくはこちら



 本当はこんなに大きく書きたくはないのですが、なかなか守っていただけなくて…。
 守ってくださいね。お願いします。(by管理人)

C言語ソース⇒HTML形式ツール   掲示板2こちら


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

No.20047

二分木の削除方法
投稿者---ootya(2005/02/17 16:31:17)


すいません、過去のログから続けようかと思ったのですが、なかったので新規にさせていただきました。前回で削除はできたのですが、メモリを残しているのはもったいないので、開放しようとしたのですが開放しようとすると壊れてしまいます。どなたかご教授いただけないでしょうか?
全文必要のときはのせますので。
struct _node *Del_tree(struct _node *root, char *n)
{

    if(root == NULL)
       printf("Not found.\n");
    else if( root != NULL ){
       if((strcmp(root -> data, n)) > 0){
          root -> left = Del_tree( root -> left, n );
       }else if( (strcmp(root -> data, n)) < 0){
          root -> right = Del_tree( root -> right, n );
       }else {
          if(root -> left == NULL ){
             return root -> right;
          } else if( root -> right == NULL ){
             return root -> left;
          } else {
             root -> right = Del2_tree(root -> right, root -> data);
          }
       }
    }
    return root;
}
struct _node *Del2_tree(struct _node *root, char *n)
{
    if( root -> left == NULL ){
       strcpy(n, root -> data);   /* 根のところのものと置き換えるものをnに代入 */
       free(root -> data);
       return root -> right;   /* 削除関数へ戻る */
    } else {   /* 再帰呼び出しで繰り返す */
       root -> left = Del2_tree( root -> left, n );
    }
    return root;
}



この投稿にコメントする

削除パスワード

発言に関する情報 題名 投稿番号 投稿者名 投稿日時
<子記事> 二分木の削除方法 20048 ootya 2005/02/17 16:38:35
<子記事> Re:二分木の削除方法 20079 ぽこ 2005/02/19 02:34:06
<子記事> Re:二分木の削除方法 20081 Craft 2005/02/19 05:34:23


No.20048

二分木の削除方法
投稿者---ootya(2005/02/17 16:38:35)


すいません、freeを使用した所は
if(root -> left == NULL ){
return root -> right;
} else if( root -> right == NULL ){
return root -> left;
ここが
if(root -> left == NULL ){
return root -> right;
free(root);
} else if( root -> right == NULL ){
free(root);
return root -> left;


この投稿にコメントする

削除パスワード

No.20079

Re:二分木の削除方法
投稿者---ぽこ(2005/02/19 02:34:06)


>開放しようとしたのですが開放しようとすると壊れてしまいます。

全文載せることをお勧めします。
・何をもって壊れたと判断したのでしょうか?
・ootyaさんがどのような入力を行って、どのような結果を期待し、
 どんな結果が出たのでしょうか?  


この投稿にコメントする

削除パスワード

No.20081

Re:二分木の削除方法
投稿者---Craft(2005/02/19 05:34:23)


壊れるとはどういう結果になるのでしょう?
あと、開放ではなく、解放です。用語はただしく。

削除処理だけだとツリーがどう作られて解放されているのかわからないので、全文掲示したほうがいいです。
ツリー処理の作成、解放のテストは、できるだけ木構造が小さいツリーを作るようにすると、確認しやすいです。


この投稿にコメントする

削除パスワード

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