このディレクトリの索引

# 出典 :: C/C++の宿題片付けます 127代目 #405 # [1] 授業単元:プログラミング実習I # [2] 問題文(含コード&リンク):http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9459.txt # typedef struct node *Tree; # typedef struct node{ # int data; # Tree left_subtree; # Tree right_subtree; # } Node; # という風に定義された構造体を木の節点として # ポインタでつなげることによって表すことができる。 # この様に表された2分木の根節点へのポインタが引数 # として与えられた時、その2分木の高さ(すなわち、 # 根節点から葉節点までの枝の本数の最大値)を # 調べて返すCの関数 #     int height(Tree t); # を定義せよ。ただし、簡単さのため、ここでは、 # height(NULL)=-1として関数定義を行え。 # # HINT. # 2分木の高さに関する # 2分木の高さ=max{(2分木の左部分木の高さ), # (2分木の右部分木の高さ)}+1 # という漸化式に着目すれば簡単。 # 木(a,b,c). 木(b,[],d). 木(d,[],[]). 木(c,e,f). 木(e,[],[]). 木(f,g,[]). 木(g,[],h). 木(h,[],[]). 木の高さ([],-1) :- !. 木の高さ(_根,_高さ) :- 左枝の高さと右枝の高さの高い方の高さ(_根,_高さの二), _高さ is _高さの二 + 1. 左枝の高さと右枝の高さの高い方の高さ(_根,_高さ) :- 木(_根,_左枝,_右枝), 左枝の高さと右枝の高さの(_左枝,_右枝,_左枝の高さ,_右枝の高さ), 高い方の高さ(_左枝の高さ,_右枝の高さ,_高さ). 左枝の高さと右枝の高さの(_左枝,_右枝,_左枝の高さ,_右枝の高さ) :- 左枝の高さと(_左枝,_左枝の高さ), 右枝の高さの(_右枝,_右枝の高さ). 左枝の高さと(_左枝,_左枝の高さ) :- 木の高さ(_左枝,_左枝の高さ). 右枝の高さの(_右枝,_右枝の高さ) :- 木の高さ(_右枝,_右枝の高さ). 高い方の高さ(_左枝の高さ,_右枝の高さ,_高さ) :- max_list([_左枝の高さ,_右枝の高さ],_高さ).