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

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

 詳しくはこちら



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

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


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

No.19320

二分木でない木のなぞり(中順)のプログラム
投稿者---TBM(2005/01/19 02:45:57)


はじめましてこんばんは。
木の中順のなぞりのプログラムで躓いてしまいました。
過去ログ拝見させて頂いたのですが二分木の場合のみしかわからなかったので質問させて頂きます。

#include<stdio.h>
#define N 100
struct cell
{
    int node;
    struct cell *next;
};


preorder(int k,struct cell **S)
{
    struct cell *q;
    printf("%d",k);
    q=S[k];
    while(q != NULL)
    {
        preorder(q->node,S);
        q=q->next;
    }
    return;
}


postorder(int k,struct cell **S)
{
    struct cell *q;
    q=S[k];
    while(q != NULL)
    {
        postorder(q->node,S);
        q=q->next;
    }
    printf("%d",k);
        return;
}

この前順と後順のような感じで中順を実現することは可能でしょうか?
どなたかご存知の方がおられたらよろしくお願いします


この投稿にコメントする

削除パスワード

発言に関する情報 題名 投稿番号 投稿者名 投稿日時
<子記事> Re:二分木でない木のなぞり(中順)のプログラム 19321 あかま 2005/01/19 02:51:31
<子記事> Re:二分木でない木のなぞり(中順)のプログラム 19338 Craft 2005/01/19 15:09:44
<子記事> Re:二分木でない木のなぞり(中順)のプログラム 19351 TBM 2005/01/20 00:01:26


No.19321

Re:二分木でない木のなぞり(中順)のプログラム
投稿者---あかま(2005/01/19 02:51:31)


>この前順と後順のような感じで中順を実現することは可能でしょうか?
中順てなんでしょう?
前順と後順は、前から辿る&後ろから辿るってことだと思いますが。

見た限りこのプログラムはリスト構造です(リスト構造も木の一種?)。
枝が一本で一直線につながってるわけですから、前と後ろから以外に辿れない気が。


この投稿にコメントする

削除パスワード

No.19327

Re:二分木でない木のなぞり(中順)のプログラム
投稿者---επιστημη(2005/01/19 07:45:46)


>見た限りこのプログラムはリスト構造です(リスト構造も木の一種?)。
>枝が一本で一直線につながってるわけですから、前と後ろから以外に辿れない気が。

うーん、枝が一本では木(tree)とは呼べんだろ。
で、'中順'って、どんな順?



この投稿にコメントする

削除パスワード

No.19338

Re:二分木でない木のなぞり(中順)のプログラム
投稿者---Craft(2005/01/19 15:09:44)


>木の中順のなぞりのプログラムで躓いてしまいました。
>過去ログ拝見させて頂いたのですが二分木の場合のみしかわからなかったので質問させて頂きます。

>この前順と後順のような感じで中順を実現することは可能でしょうか?
>どなたかご存知の方がおられたらよろしくお願いします

リンクの掲示についてのルールがちょっと不明なのですが、
google で「二分木 inorder」というキーで検索したところ、
中順探索、のサンプルソースがのっているページがヒットしました。

参考にしてみてはいかがでしょう?

私も中順という探索法は初耳でした。


この投稿にコメントする

削除パスワード

No.19341

Re:二分木でない木のなぞり(中順)のプログラム
投稿者---あかま(2005/01/19 18:32:15)


失礼しました。勉強不足でした。
あったんですね。中順。

しかも過去ログにも。
http://f4.aaa.livedoor.jp/~pointc/log295.html


この投稿にコメントする

削除パスワード

No.19351

Re:二分木でない木のなぞり(中順)のプログラム
投稿者---TBM(2005/01/20 00:01:26)


みなさんレスありがとうございます!!
そして説明不足だったようですいません
木のなぞりの定義は、木の節点の出力を1回目に通ったときに行うのが前順、最後に通るときに節点を出力するのが後順、2回目に通ったときに行うのが中順だと思うのですが…。
     0
   / \
  1     2
 /|\     /\
3 4 5   6  7
          /\
         8 9

例えば上図のような木の場合だと、
前順:0134526897
中順:3145086927
後順:3451896720
というようになぞるプログラムを作りたいのです。
そして木はポインタによって実現されていることを前提にしています。
具体的にいうと、節点集合に対応する配列S[i]を準備し、S[i]には節点iの子節点へのリストへのポインタを格納するようにしています。
上図の木の場合だと

0→1→2NULL
1→3→4→5NULL
2→6→7NULL
3NULL
4NULL
5NULL
6→8→9NULL
7NULL
8NULL
9NULL

というような感じです
拙い説明で申し訳ありません…どなたかお願いします


この投稿にコメントする

削除パスワード

No.19352

Re:二分木でない木のなぞり(中順)のプログラム
投稿者---NykR(2005/01/20 00:13:48)


二分木以外では中順はありません。が、

>木のなぞりの定義は、木の節点の出力を1回目に通ったときに行うのが前順、最後に通るときに節点を出力するのが後順、2回目に通ったときに行うのが中順だと思うのですが…。

と決めるのであれば、

あるノードをルートとする部分木の処理は
・一つ目の部分木を処理(再帰呼び出し)
・ルートを処理
・二つ目の部分木を処理(再帰呼び出し)
・     :
・最後の部分木を処理(再帰呼び出し)

というやり方になると思います。


この投稿にコメントする

削除パスワード

No.19353

Re:二分木でない木のなぞり(中順)のプログラム
投稿者---江戸門電鉄(2005/01/20 00:44:37)


>二分木以外では中順はありません。が、
>
どこにそんなことが書いてあるのかな。
とりあえず、多分木のinorderは下記のとおり。
参考:データ構造とアルゴリズム 培風館発行
根がn、その部分木が左からT1・・・Tkのとき、
T1のinorder,n,T2のinorder,・・・Tkのinorder
なお、実装にはキューやスタックを使ったほうが見通しがよいでしょう。
というか、これらを使わないで木を辿るのがまともなプログラムとは思えない。


この投稿にコメントする

削除パスワード

No.19354

Re:二分木でない木のなぞり(中順)のプログラム
投稿者---επιστημη(2005/01/20 04:58:00)


>なお、実装にはキューやスタックを使ったほうが見通しがよいでしょう。
>というか、これらを使わないで木を辿るのがまともなプログラムとは思えない。

使うてますやん。再帰なんだから。




この投稿にコメントする

削除パスワード

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