2011-10-21 11 views
2

나는 C에서 bst를 구현하려고 시도 해왔다. 나는 거의 거기에 있다고 생각하지만, 노드 추가 기능에서 current라는 임시 노드를 생성하여 현재 노드를 저장한다. 트리에서 방문합니다. 그런 다음 현재 노드를 수정하면 기능 완료 후 내 orignal 포인터가 수정되지 않습니다.C 이진 검색 트리 구현

나는 이것을 읽었고, 포인터 포인터가 필요할 것이라고 생각했지만, 원래 구조체를 어떻게 업데이트 할 지 잘 모르겠습니다.

+1

다른 사람이 같은 운동을하기 전날. 숙제 태그를 추가하십시오 ... – Manos

+0

'malloc'의 반환 값을 형 변환하지 마십시오 : http://stackoverflow.com/questions/1565496/specifically-whats-dangerous-about-casting-the-result-of-malloc – gnud

+2

왜 그 문제가 있다고 생각하니? btw wtf는 다음과 같습니다 :'struct node ** current = & (* string) -> root;'? –

답변

1

문제는 bstlist_add에있는 포인터에 대한 포인터와 관련이 있습니다. 다음은 코드에서 변경해야 할 사항을 파악하는 데 도움이되는 예제입니다.

int a=10; 
int b=20; 

void noChange(int * pSomeInt); 
void change(int ** ppSomeInt); 

int main(int argc,char * argv[]) 
{ 
    int * pMainInt=&a; 

    noChange(pMainInt); 
    //pMainInt will still point to a 

    //since the parameter to change is int **, we have to use & here 
    change(&pMainInt); 
    //pMainInt now points to b 

    return 0; 
} 

void noChange(int * pSomeInt) 
{ 
    //while pSomeInt is a pointer, it is a copy of pMainInt, not a pointer to it 
    //so this creates a pointer to the parameter, pSomeInt, itself 
    int ** ppSomeInt=&pSomeInt; 

    //so this changes the parameter, pSomeInt 
    *ppSomeInt=&b; 
} 

void change(int ** ppSomeInt) 
{ 
    //ppSomeInt is a pointer to pMainInt, which is itself an int * 
    //so *ppSomeInt is pMainInt and not a copy of it 
    *ppSomeInt=&b; 
} 
+0

내가 찾던 모두가 모범이나 설명 이었기 때문에 Manos와 같은 일부 사용자가 너무 편한 이유는 모르겠다. – user557240

+0

그냥 마지막으로 한 가지. 특정 헤더를 구현해야하므로 Bst ** bst로 매개 변수를 변경할 수 없으므로 별도의 다른 함수를 작성해야합니까, 아니면이를 수행하는 더 좋은 방법이 있습니까? – user557240

+1

@ user557240 : 숙제가 중요합니다. 숙제 문제를 올바르게 표기하지 않으면 누군가가 숙제 문제를 해결할 수 있습니다. 따라서 항상 숙제 문제에 태그를 달고 지금까지 얻은 것을 제공하십시오 (심지어 옳지 않은 경우). 사람들은 임무를 망치지 않고 즉각적인 걸림돌을 피할 수 있도록 돕고 malloc 반환 값과 같은 부수적 인 논평을 제공합니다. – ccoakley