حاسوب تجد متكرر أكبر عقدة
-
11-07-2019 - |
سؤال
ومجرد شجرة ثنائية بسيطة وأريد أن العثور على أكبر عقدة.
سبيل المثال شجرة: ر (ر (ر (صفر، 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).