cで木構造を書く1

http://serennz.sakura.ne.jp/sb/log/eid120.html
このページを参考に。
自分用に調べたことをまとめておきます。
院試が終わって時間が空けば自分で実装してみる予定。


実装にはポインターを用います。

struct node {
  struct node * parent;
  struct node * child;
  struct node * next;
  char *name;
  int depth;
};

nodeは自身と同じ型への3つのポインターparent,child,nextを持つ構造体として定義されます。
ここで,parentは今のnodeの一つ上のnodeを,nextはひとつ隣の,childはひとつ下のnodeを表します。
少し例を見てみましょう。

例えばroot以下、n1,n2,n1以下n3,n4が続くような構造を表したいのであれば、

- root
  - n1
    - n3
  - n2

まずrootを次の用に定義します。

node root, n1, n2, n3, n4;
root.parent = NULL;
root.child = &n1;
root.next = NULL;

rootは木構造の頂点に位置するのですからこれより上(parent)はありません(NULL)。
また今の例では頂点は一つですから同じ階層にこれに隣接するnodeもありません。(root.next = NULL)
rootの下にはn1が位置します(root.child = &n1)

次に,n1を定義します。

n1.parent = &root;
n1.child = &n3;
n1.next = &n2;

n1の上にはrootがあります。(n1.parent = &root)
n1の下にはn3が、同じ階層の隣にはn2があります。(n1.child = &n3, n1.next = &n2)

最後にn3,n2を定義しましょう。

n2.parent = &root;
n2.child = NULL;
n2.next = NULL;

n3.parent = &n1;
n3.child = NULL;
n3.next = NULL;

これで図の木構造を構成できたことになります。