سؤال

ومجرد شجرة ثنائية بسيطة وأريد أن العثور على أكبر عقدة.
سبيل المثال شجرة: ر (ر (ر (صفر، 1، صفر)، 2، تي (صفر، 3، لا شيء)) و 4 و ر (ر (ر (لا شيء، 8، صفر)، 5، لا شيء) و 6 و ر (لا شيء، 7، لا شيء)))

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).

وتحرير: ويتحقق كل ورقة العقد، ولكن يتجاهل ر (لا شيء، 8، صفر)

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).
هل كانت مفيدة؟

المحلول

آخر ديرنج ؟

في أي حال، سأحاول أن تمكنك من فعل التفكير منذ يبدو لك أن تكون تعلم حاسوب. ناهيك عن حقيقة أن ليس لدي فعلا حاسوب يعمل على جهاز الكمبيوتر الخاص بي، لذلك لا يمكن أن تكون على يقين من أن حل بي المقترح فعلا العمل.

والحقيقة أن 5 هي العقدة الوحيدة التي فرعية واحدة فقط (أي 8 أنه تجاهل) ينبغي أن أقول لك شيئا. جميع العقد الأخرى هي إما ورقة العقد أو واثنين من subnodes.

ما هو بالضبط الذي كنت تعتقد هذه القواعد اثنين تفعل؟

tree(t(nil,Q,_),Q).
tree(t(_,Q,nil),Q).
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top