1D 배열을 사용하여 이진 검색 트리를 만듭니다. 내 문제는 삽입 기능입니다.이진 검색 트리의 배열 구현
트리를 출력 할 때 5, 8, 3, 1, 4 및 9를 삽입하면 올바른 색인이 생성됩니다. 그러나 트리에 9 이후에 숫자를 추가하려고하면 인덱스가 잘못됩니다. 예를 들어 앞에서 언급 한 숫자의 경우 9의 지수는 7입니다. 15의 지수 대신 9의 오른쪽 자식 인 17을 삽입하면 색인은 11입니다.
어떻게 내가 증분 내가하지만 나는 그것을 고쳐야할지 모르겠다. 어떤 도움을 주셔서 감사합니다. 감사! 노드에 대한 포인터 temp
에서 유지되고 노드의 인덱스가 i
에 보관 :
void insert(int x)
{
int i = 1; //Counter
if (ptr->arr[1] == -1) //If bst is empty.
{
ptr->arr[1] = x;
}
else
{
int *temp = &ptr->arr[1]; //Temp starts at root
int *parent = NULL;
while (*temp != -1 && *temp != x)
{
if (x < *temp)
{
parent = temp;
temp = &ptr->arr[i*2];
i++;
}
else
{
parent = temp;
temp = &ptr->arr[i*2+1];
i+=2;
}
}
*temp = x;
}
감사합니다. 위에서 변경 한 다른 변경 사항을 시도해 본 결과 런타임 오류가 발생했습니다. 임시직을 내리는 것이 최선의 방법이라고 생각합니다. –
그러면 배열의 크기가 충분하지 않을 수 있습니다. –