나는 하루 종일 머리에 맞았다. 새로운 눈의 시간.Ancestry gem "평평한 나무"
저는 조상 보석을 사용한 나무 구조 모델을 가지고 있습니다. 위대한 작품과 TreeNode.arrange
전화 중첩 된 나무 인 깔끔한 작은 해시를 반환합니다. 문제는 더 나은 설명이 부족하여 "평평한 나무"를 찾고 있다는 것입니다. 예를 들어 :
Node1
Node2
Node3
Node4
Node5
Node6
Node7
Node8
Node9
달리보다 전통적인
Node1
Node2
Node3...
그래서 다른 말로 난 단지에 "들여 쓰기"내 나무 분기점이있는 경우 (하나 이상의 아이를) 할 수 있습니다. 나는 이것을하는 가장 좋은 방법이 재귀 함수라고 생각했다. 나는 몇 가지 변종을 시도하고 난 그냥 화면의 빈 그리기하고이 하나 : - \
def walk_until_fork(tree_hash,&blk)
tree_hash.each do |node,children|
yield node.title
if children.keys.length > 1
#fork point
children.each do |subnode,grandchilden|
walk_until_fork(grandchilden,&blk)
yield subnode.title
end
else
walk_until_fork(children,&blk)
end
end
end
포크 점 출력의 하단 끝입니다 테스트 코드를 호출의 결과 : - \
을내가보기를 원하는 것은 해시 구조입니다.하지만 자식이 있어야하는 유일한 키는 분기가 일어난 곳입니다 (하나의 분기가 현재 수준에서 계속되고 각 n 분기가 해당 분기 후에 계속됩니다).
확실한 지 확실하지 않습니다. 필요한 경우 질문을 명확히하겠습니다.
는 (1-9 UR 노드를 설명해주십시오) 다시 ... node2는 node1과 같은 레벨에 있거나 node2는 1 레벨이됩니까? 낮은 노드 1.? 노드 3과 노드 4의 레벨 차이 –
노드는 참 노드입니다. 노드 1에는 노드 2의 하위 노드가 있고 노드 2에는 노드 3의 하위 노드가 있습니다.하지만 노드 트리를 "평평하게"하여 원하는 경우에만 하나의 자식 노드는 분기가 필요 없습니다. 희망이 도움이됩니다. 나는 내 자신의 질문에 대답했지만 다른 누군가는 더 좋은 생각을 가지고있을 것이다. – Kansha