좋은 날,유한 상태 머신으로 이진 트리를 트래버스 할 수 있습니까?
그냥 재귀 적 또는 반복적 인 해결책을 찾고있는 것이 아닙니다. Wikipedia는 모든 트리의 사전, 순서 및 사후 순회를 구현하기에 충분한 의사 코드를 가지고 있습니다.
저는 바이너리 트리를 통과하는 유한 상태 기계를 만드는 데 관심이 있습니다.
트리는 노드로 구성됩니다. 노드에는 LeftChild, RightChild 및 Parent 속성이 있습니다.
FSM은 주어진 시간에 노드에서 정지하지만, 필요한만큼의 상태를 가질 수 있지만 어떤 종류의 동적 스택도 없습니다 (튜링 기계와 구별됩니다). "GiveNext"입력에서 기계는 다음 노드에서 정지해야합니다 (예 : 선주문 순회).
나는 지금 당분간 노력해 왔지만 가능하지 않다고 생각하지만 나는 그렇지 않습니다. 확실한. 문제는 최근 의사 결정을 추적 할 필요가 있기 때문에 부모를 통해 노드를 다시 방문 할 때 왼쪽 처리가 끝나면 오른쪽으로 돌아갈 수 있습니다.
생각하십니까?
미리 감사드립니다. 허브
Morris Inorder Traversal을 살펴 보셨습니까? https://en.wikipedia.org/wiki/Tree_traversal#Morris_in-order_traversal_using_threading – msandiford
감사합니다, @msandiford. 스레드 된 이진 트리 ([link] (https://en.wikipedia.org/wiki/Threaded_binary_tree))는 순서대로 트리에 액세스 할 때 함께 작업하는 것이 좋습니다. 불행히도 트리 레이아웃을 변경하는 것은 의문의 여지가 있습니다. 나무가 프리픽스 트리 (일명 Patricia trie)이기 때문에 액세스하는 가장 현명한 방법은 선주문입니다. 단순한 호기심에서 (어쨌든 트리 레이아웃을 바꿀 수 없기 때문에) : 선주문 순회를위한 스레드 이진 트리가 없습니까? – Herb