모든 단계에서 현재 노드를 가져올 inorder 순회를 구현하려고합니다. 나는 다음 코드를 시도했습니다이진 트리 inorder 탐색을 사용하여 프롤로그
?- getnodesinorder(tree(1,nil,nil),X).
X = 1 ;
false.
?- getnodesinorder(tree(5,tree(4,tree(1,nil,tree(3,tree(2,nil,nil),nil)),nil),tree(6,nil,nil)),X).
X = 1 ;
X = 2 ;
X = 3 ;
X = 4 ;
X = 5 ;
X = 6 ;
false.
: 예를 들어 그래서 물론
getnodesinorder(tree(CurrentNode,nil,nil), CurrentNode).
getnodesinorder(tree(X, Left, nil), CurrentNode) :-
getnodesinorder(Left, _),
CurrentNode is X.
getnodesinorder(tree(X, nil, Right), CurrentNode) :-
CurrentNode is X,
getnodesinorder(Right, _).
getnodesinorder(tree(X, Left, Right), CurrentNode) :-
getnodesinorder(Left, _),
CurrentNode is X,
getnodesinorder(Right, _).
기본 (1 예 작동)하지만를 내가
X=5;
false
를 얻을 수 2 하나를 실행하려고 할 때 결과적으로
결과로 왜 그런가요?
좋아했던 그 (참조 위의 편집)하지만 지금은 그냥 얻을 X = 5는 false 웬일인지. – user550413
내 샘플을 사용해보십시오. 항상 추적을 사용하는 것을 잊지 마십시오. –
예.하지만 목록을 사용했습니다. 귀하의 코드에서 X는 귀하가 작성한 목록이며, 결국 귀하는 inorder 순회 목록을 가지고 있습니다. 나는 다른 것을 원해. 나는 모든 올바른 값을 얻는 변수가되기를 원한다. 예와 같이 입력 할 때 ";" 다음 X (inorder 순서의 다음 번호)를 얻고 싶습니다. – user550413