2013-12-08 8 views
0

'a tree = | 비어있는 | 'a *'의 노드 * 'a tree *'tree ref ;;OCaml - inorder (이진 트리)의 다음 노드에 대한 참조 설정

우리는 inode에서 다음 노드에 대한 모든 노드 트리 심판을 설정하고 싶습니다.

예를

Node (1, Node(2, Empty, Empty, ref Empty), Node(3, Empty, Empty, ref Empty), ref Empty)) 
The result is: 

Node (1, Node(2, Empty, Empty, content = {Node (1....) })..... 
+0

당신이 작성한 코드를 보여주지 않는 한 과제를 망치지 않고 왜 도움이되는지를 설명하고 그것이 왜 효과가 없는지 설명하십시오. 일반적인 힌트로서, 나는 이것을 요구한다. 마지막 노드에서 수행 할 작업을 결정해야합니다. –

+0

나는 ocaml 및 함수 프로그래밍을 배우는 것이 좋습니다. 당신의 상사가 뭔가를 성취하기 위해 당신에게 ocaml을 사용하도록 요청한 것 같지만, 당신의 Java 명령형 용기는 당신을 악으로 인도합니다. 제발, 그냥 배우십시오. –

+0

이 경우 폴드 사용 방법은 무엇입니까? – user3077133

답변

0

것은 어렵지 않다 : 이전 노드에 포함 된 참조를 주위에 전달 (그리고 가 반환)하는 동안, 중위 순회을한다. 주어진 노드에 을 얻으면 이전 노드의 참조를 현재 노드로 설정합니다. 각 노드가 이전 참조에 지정되면 모든 노드의 참조에 다음 노드가 포함됨을 의미합니다. 당신은 노드 2의 경우 2 1 3

, 당신은 노드 1 때입니다 발신자에 그 심판을 반환 : 예에

는 중위 순회는이 위해 트리를 통해 간다 노드 1에 도착하면 노드 2의 ref를 노드 1을 가리키는 으로 설정하고 노드 1의 참조를 노드 3으로 전달합니다. 노드 3에 있으면 노드 1의 참조가 노드 1을 가리 키도록 설정합니다 3.

첫 번째 노드에 대해 수행 할 작업 (더미 참조)을 지정하고 마지막 노드 (아마도 집합 빈에 대한 참조. 첫 번째 노드에 을 설정하는 것이 유용한 경우도 있음).

나는 작업 코드 (15 줄)를 가지고 있습니다. 나는 그것을 게시하지 않을 것이다 은 추정 된 assigment를 망칠 것이기 때문에.