━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 課題1の補足 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
●補足 1a *編集するファイル 2分木の基本関数 branch() と leaf() は,tree.c の定義を完成させる. *データの生成 関数 branch() と leaf() を使った2分木データの生成では, プログラム中でデータが作れればよい.算術式を表す文字列から 2分木データへの変換は次回扱う. 演習のホームページ上にある「木構造による数式の表現」や 課題1cのプログラム例が参考になる. 演習のホームページ上にある「C言語によるメモリ管理」も参考にするとよい. *関数 show_tree() 関数 show_tree() の定義は,ファイル tree.c にある. 再帰関数(自分自身を再び呼び出す関数)show_tree_sub() が 左右の部分木に対して次々と表示処理を繰り返す働きをもつことに注意する. プログラムをよく読み,2分木がどんな文字列に変換されるか, また,2分木全体の処理がどう実現されているか,を理解すること. 例えば,算術式 a + b を表す2分木を show_tree() で表示すれば, +(a(#,#),b(#,#)) となる(# は NULL を表す). show_tree() の出力文字列が表す木を図で表示するには, 演習用コマンド ~toshi/show-tree が使える. ●補足 1b *問題が難しい場合 この課題に全く手が付かない場合,とりあえず次の課題に進んでよい. 第1回演習後にホームページ上に公開される「再帰の考え方」の資料を 参考にして再挑戦すること. ●補足 1c *関数 show_node() 関数 show_node() の機能を詳しく知るには,show_node() の定義を読むこと. ────────────────────────────────────── ●補足 1d *発展課題 発展課題に取り組む場合は,あらかじめ動作試験の実施方法を読み, 正常にコンパイルできるように機能拡張するとよい. 特に,ヘッダファイル tree.h は,配布したものを そのまま動作試験で使うため,内容を変えないこと. *参考になる関数 tree.c にある,2分木の等しさの判定関数 equal_tree() が参考になる. ●補足 1e *節の生成の注意 元の木を削除しても鏡像が失われないように,(与えられた木の節を 再利用せずに)関数 branch() と leaf() を使って,鏡像の各節を 新たに作ること. *領域の解放に使う関数 Tree * 型ポインタ t が指す木全体の記憶領域を解放するには free_tree(t); を実行する.関数 free_tree() は tree.c に用意されている. ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 演習のホームページ 山田 俊行 https://www.cs.info.mie-u.ac.jp/~toshi/