useless tips

C++ World の tutorial も、二分木のところを なんとか 訳し終えたので、ここ 10日ほどは 訳文のコピーを ひっくりかえしたり、脳内妄想(?)コードを メモったりしていた。
データから 二分木をつくる 簡単な コードを 書いて、コンパイル。 実行させると、いきなり セグメンテーション違反に ... どうやら 構造体の初期化を忘れてた (;_;)
よく わかってないな〜 というわけで、疑似コードだけ 書いてみます。


/* b_insert.c */
#include
#include

struct Node {
int data;
struct Node *left;
struct Node *right;
};

int new_node(); /* 新しいノードの作成 */
int tree_insert() /* 二分木の挿入 */
void btree_walk(); /* 走査 */
int tree_height(); /* 木の高さ */

main()
{
int value;
struct Node *root;

root = NULL; /* 構造体の初期化 */
while (scanf("%d", &value) != EOF)
tree_insert(&root, value);
btree_walk(tree);
putchar('\n');
printf("%d\n", tree_height(root));

return 0;
}
(以下略)

K&R 2nd では、P168-173 の 単語処理計算で 二分木が 使われています。
あと 気がついた点では、new_node や tree_remove という メモリを管理する 関数が 使われている、ということ。
それと、おのおのの 関数の機能や balancing algorithm は なんとか わかったけど、実際 それらを コードに 実装させる やり方 - 挿入や 削除の - が ちょっと わからない。
tutorial では 「1つの topic の 解釈だけ」しか 扱えないので、完全なものは 本を参照するよう 書かれてたけど、どうなんだろう ?
データ構造の本を 見てると、それぞれの モジュールの部分は - B木 あたりまで - 詳しく 書いていても、そのあたりを コードで 説明しているものが、少ないような 気が するんですが ...