1
inorder 여행 방법에서 이진 트리를 통과하려고합니다. 내 목표는 트리에서 특정 키의 출현을 찾는 것입니다. for 난 내 inorder_finder를 사용할 때트리에서 요소의 inorder 위치를 찾고있는 프롤로그 (목록을 사용하지 않고)
t(t(t(nil,"d",t(nil,"g",nil)),"b",t(nil,"e",nil)),"a",t(t(nil,"f",t(nil,"h",nil)),"c",nil))
난 다음 얻을 것이다 : 예, 난 다음 나무가 "C"에 대한 을 내가 "w에 대한"D "내가 얻을 것이다 1 을 얻을 것이다 "얻을 것이다 -1
나는 가지고있다 com
inorder_finder(nil,_,_,0).
inorder_place(t(_,X,_),X,Count,Place) :-
Place is Count+1.
inorder_place(t(L,_,R),Wanted,Count,Place) :-
inorder_place(L,Wanted,Count+1,Place),
Place<1,
inorder_place(R,Wanted,Count+1,Place),
Place<1,
Count = Count+1.
그리고 난 다음 술어를 호출 : 전자까지 다음 코드
inorder_finder inorder_place(t(t(t(nil,"d",t(nil,"g",nil)),"b",t(nil,"e",nil)),"a",t(t(nil,"f",t(nil,"h",nil)),"c",nil)),"c",1,Place)
하지만 순간에 일을 나던. (그냥 항상 false를 반환) 어떤 아이디어?
업데이트 : 내가받은 의견에 따라 코드를 업데이트 한 - 아직 내가 남아 어떤 의견에 언급 된
_ "C "나는 8_ 이유를 얻을 것이다 ?? 당신의 나무에는 전혀 "c"가 없습니다. – coder
이것은 다소 혼란 스럽습니다. 장소 위치가 1 또는 0에서 시작합니까? 유효하지 않은 장소는 -1로 설정되지만 장소가 <1 인 경우 코드는 계속 검색하며 0은 유효하지 않은 장소 표시로 간주됩니다. 그리고 지금은 작동하지 않습니다. * 어떤 방식으로 작동하지 않습니까? 마지막으로,'inorder_finder (...'를 표시 할 때 술어를 호출하면 오류가 발생합니다. In Prolog에서는 펑터와 왼쪽 괄호 사이에 공백을 넣을 수 없습니다. – lurker
안녕하세요 - 나무를 업데이트 한 첫 번째 감사 (C로 작성한 두 번째 줄을 복사하지 못했습니다)와 공백이 없도록 조건부를 업데이트했습니다. 첫 번째 표시기가 1이되어야합니다. 어떤 제안이 잘못 되었습니까? – user1322801