내 바이너리 트리의 항목이 잘못 삽입되는 문제가 있습니다. 각 노드에 문자열을 삽입하고 있습니다. 나는 틀린 나무로 항상 끝내는 것처럼 보이기 때문에 내가 뭔가 잘못하고 있다고 생각합니다. 즉이진 검색 트리. 삽입 방법이 잘못 삽입되었습니다.
A, B, C
는나는
B
/\
A C
을해야하지만, 어떻게 든 내가 좋아하는 끝낼 :
C
/\
B A
또는 뭔가 다른 내가에 삽입되는 순서에 따라 내 나무.
이 내 나무 클래스 :
이 내 삽입 방법이고 도우미 메서드를 삽입합니다. 너는 내가 뭘 잘못하고 있는지 한번 볼 수 있니? 미리 감사드립니다.
당신이 periviusly 삽입 된 것을 변경하지 않을 경우 렸기 때문에의void BinarySortTree::insert(string key)
{
if(root != NULL)
{
insert(key, root);
}
else
{
root = new TreeNode;
root->item = key;
root->left = NULL;
root->right = NULL;
}
}
void BinarySortTree::insert(string key, TreeNode *node)
{
bool done = false;
while(!done)
{
if(key.compare(node->item) < 0)
{
if(node->left != NULL)
{
node = node->left;
}
else
{
node->left = new TreeNode;
node->left->item = key;
node->left->left = NULL;
node->left->right = NULL;
done = true;
}
}
else if(key.compare(node->item) > 0)
{
if(node->right != NULL)
{
node = node->right;
}
else
{
node->right = new TreeNode;
node->right->item = key;
node->right->left = NULL;
node->right->right = NULL;
done = true;
}
}
else if(key.compare(node->item) == 0)
{
done = true;
}
}
}
귀하의 알고리즘은 재귀 적이 지 않습니다. 질문 태그를 수정하십시오. 삽입이 진행되는 방식과 방법을 다시 읽으라고 조언합니다. –
@ Mr.TAMER : 위의 * 구현 *은 확실히 재귀가 아닙니다. * 알고리즘 자체에 관해서는 그렇게 단순하지 않습니다. 알고리즘 적 재귀의 넓은 정의에 따라 공식적으로 재귀 적으로 호출 될 수 있습니다. 사실, 알고리즘 관점에서 볼 때, 어떤 사이클은 퇴보의 퇴화 된 형태로 해석 될 수 있습니다. – AnT
@ 안드레이 T : 고마워, 몰랐어 ... 수업이 배웠어. –