0
내 트리 (글쎄, 바이너리 트라이)를 쓰려고합니다. 더 일반적인 방식입니다. 지금은 매우 비슷한 코드가 반복되어 있기 때문입니다.트리 구조의 일반 탐색
나는 사전 식 inorder에서 나무를 걷고있다. 나는 보편적 인 트리 탐색에 의해 추상화 될 수 있다고 생각 함수의 예 (의사 코드)입니다 : 내가 코드를 올바른 방향으로 그냥 밀어 기능을 요구하고 있지 않다
items(node*, key, list&) {
if(node->value)
list.push({node->value, key})
if(node->left)
items(node->value, key + "0")
if(node->right)
items(node->value, key + "1")
}
draw(node*, id, ostream&) {
drawNode(node, id)
if (node->left)
drawLine(node, node->left, "0", ostream&)
draw(node->left, ++id, ostream&)
if (node->right)
drawLine(node, node->right, "1", ostream&)
draw(node->right, ++id, ostream&)
. 함수를 인수로 사용하는 템플릿을 사용해야합니까? 순회가 단일 왼쪽/오른쪽 노드 (두 트라이의 병합이이 추상화의 후보와 너무 비슷해 보임)의 존재에 의해 조건이 충족되지 않는 더 복잡한 경우는 어떻습니까?
재귀 일반 탐색을 수행하는 방법에 대한 답변이 없지만 반복기는 실제로이 작업에 더 적합하다고 생각합니다. – Davar
@Davar : 재귀 적 순회를하지 않겠습니다! 위치의 개념은 다소 유용하지만 순회와의 충돌은 재귀 적입니다. 부모 포인터가 노드에 없으면 스택을 반복자의 멤버로 저장합니다. –