저는 벡터 기반 이진 트리가 있고 다양한 트래버스 방법을 사용하여 트리의 각 값에 함수를 적용해야합니다. 선주문 탐색은 재귀 함수를 사용하여 구현하기가 매우 쉬웠지만 inorder와 postorder traversals와 동일한 작업을 수행하는 데 어려움을 겪고 있습니다. 누구라도 도움이된다면 위대한 것입니다!벡터 기반 이진 트리 탐색
다음과 같은 몇 가지 추가 정보가 포함되어 있어야합니다. 각 노드에 해당 노드가 채워지는지 여부 및 서식이 지정된 데이터 변수인지를 나타내는 부울 변수가 포함 된 노드 벡터를 사용하고 있습니다. 각 노드는 인덱스 "i"에 저장되고 왼쪽 자식은 인덱스 "2i + 1"에 있고 오른쪽 자식은 "2i + 2"에 저장됩니다.
목록에 전순 주사를 적용하려면 I 먼저 번 인덱스 내 "N"파라미터와 같은 1 & 2로 시작이 재귀 함수template <typename Item, typename Key>
template <typename Function>
void BST<Item,Key>::preTraverse(int n, Function f) {
if(tree[n].occupied == false) return;
else {
f(tree[n].data);
preTraverse(2*i+1,f);
preTraverse(2*i+2,f);
}
}
라고 다음 인덱스 0에 저장된 데이터를 처리.
올바르게 진행할 수있는 순회 코드를 게시 하시겠습니까? 이렇게하면 벡터에서 나무를 "접는"방식을 더 잘 이해하는 데 도움이됩니다. – dasblinkenlight
벡터 표현은 실질적으로 최대 값으로 채워진 왼쪽에서 오른쪽 정의입니까? (예 : [i]의 자녀는 [2i + 1] 및 [2i + 2]에 있습니까? – WhozCraig
"선주문 통과는 쉽지 만 선주문 ... 통과에 문제가 있습니다"? –