質問

単純な二分木で、最大のノードを見つけたい。
サンプルツリー:t(t(t(nil、1、nil)、2、t(nil、3、nil))、4、t(t(t(nil、8、nil)、5、nil) 、6、t(nil、7、nil)))

int L(t,max) {
if(t=null) return max;
if(max<t.root) max = t.root;
LN(t,max);
RN(t,max);
return max;
}
L(tree,tree.root);

私は頭をプロローグに適用することはできません。ここでは、各ノードを表示します。私はこれを取得しますが、最大値を保存して再帰的に保持する方法を理解していません。

tree(nil).
tree(t(L,Root,R)) :- 
    tree(L),
    tree(R), 
    write(Root).

編集:すべての葉ノードをチェックしますが、t(nil、8、nil)を無視します

tree(nil,0).
tree(t(nil,Q,nil),Q) :- !.
tree(t(nil,Q,_),Q).
tree(t(_,Q,nil),Q).
tree(t(L,_,R),Max) :- 
    tree(L, LValue),
    tree(R, RValue), 
    max(LValue,RValue,Max).
役に立ちましたか?

解決

これは別の宿題の割り当てですか?

いずれにせよ、Prologを学習しているように見えるので、私はあなたに思考をさせようとします。私が実際にコンピューターでPrologを実行していないという事実は言うまでもないので、提案された解決策が実際に機能するかどうかはわかりませんでした。

5がサブノードを1つしか持たない唯一のノード(つまり、8は無視している)であるという事実から、何かがわかります。他のすべてのノードは、リーフノードまたは2つのサブノードのいずれかです。

これら2つのルールが行うと考えることは正確に何ですか?

tree(t(nil,Q,_),Q).
tree(t(_,Q,nil),Q).
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top