에 노드를 삽입이 문제는 if 문 처음에 자리 잡고 내 삽입 기능BST
void BinTree::insert(Node * temp, NodeData * insData)
{
if (temp == NULL)
{
temp = new Node;
temp->pData = insData;
temp->left = NULL;
temp->right = NULL;
return;
}
//recursively go left or right
//....rest of the function
}
의 첫 번째 부분입니다. 여러 개의 노드를 추가하고 있습니다.
다음은 insert 함수를 호출하는 함수입니다.
void BinTree::insertMiddle(NodeData* arr[], int bottom, int top)
{
if (bottom <= top)
{
int middle = (bottom + top)/2;
if (arr[middle] == NULL)
{
return;
}
else
{
insert(root, arr[middle]);
arr[middle] = NULL;
insertMiddle(arr, bottom, middle - 1);
insertMiddle(arr, middle + 1, top);
}
}
else
{
return;
}
}
모든 노드를 삽입 한 후에도 루트는 여전히 NULL입니다. 사실 insert 함수의 첫 번째 if 문은 매번 true로 바뀝니다.
첫 번째 삽입 후 null이 아니어야합니다.
아무 것도 삭제하지 않거나 루트를 NULL로 설정할 필요가 없다고 생각합니다.
코드에 무슨 문제가 있습니까?
이러한 문제를 해결하는 올바른 도구는 디버거입니다. 스택 오버플로를 묻기 전에 코드를 단계별로 실행해야합니다. 자세한 도움말은 [작은 프로그램 디버깅 방법 (Eric Lippert 작성)] (https://ericlippert.com/2014/03/05/how-to-debug-small-programs/)을 참조하십시오. 문제를 재현하는 [최소, 완료 및 확인 가능] (http://stackoverflow.com/help/mcve) 예제와 함께 해당 질문을 \ [편집]해야합니다. 디버거. –
반복 : ** 함수 매개 변수는 지역 변수입니다. 지역 변수에 대한 할당은 외부 세계에 영향을 미치지 않습니다 **. –
나는 포인터가 값으로 전달된다는 것을 몰랐다. 나는 그것이 새로운 포인터라고 생각했지만 전달 된 포인터가 가리키는 것과 동일한 객체를 가리키고 있으므로 중요하지 않습니다. 나는 틀렸다. 내 실수. – bhroask