主題が再帰なんだから看板に合わせた方が
やっぱり講義の構成に難がある気がする『データ構造とプログラミング』。
ちぐはぐというか焦点がぼけた感じに思えて仕方ない。
それはおいておいて、
木構造のノードデータをインデント付きで表示するCプログラムの説明。
インデントをどうやって付けるのかの実装なんて今回はどうでもいいことで、
主題から離れた細かな部分をわざわざ示したりしている。
表示に関する部分は別関数に括り出して、
その関数がノードデータを表示する機能を持つことだけを講義で伝えれば済む。
実装が見たいという要望に対しては配布資料で確認させればいい。
例えば、
void node_display(NODE_TYPE* node, int level) { int i; printf("\n"); for (i = 0; i < level; i++) printf("_"); printf("%d", node->data); } void tree_display(NODE_TYPE* node, int level) { if (node != NULL) { tree_display(node->right, level + 1); node_display(node, level); tree_display(node->left, level + 1); } }
のようにして、講義では関数tree_display
の方だけを示せば十分ではないだろうか。
せっかくの再帰の回なのでインデントをforループでなどという野暮なことはせず、
void node_display_with_indent(NODE_TYPE* node, int level) { if (level <= 0) { printf("%d", node->data); return; } printf("_"); node_display_with_indent(node, level - 1); } void node_display(NODE_TYPE* node, int level) { printf("\n"); node_display_with_indent(node, level); }
のように再帰で表現すれば徹底していて楽しそうな感じがするし、
講義にこのコードを出しても主題に沿った例の一つとすることができると思う。