2013-07-21 2 views
0

나는 매우 심각한 문제가있다. 나는 이진 트리를 가지며 정확한 노드를 발견하는 동안 트리를 통해 이동하려고합니다.노드 충돌을 찾는 기능

template<class T> 
void Tree<T>::CheckTwoTimes(Node<T> *node, Node<T> *original) 
{ 
    if(node == original) cout << "This is it" << endl; 
    CheckTwoTimes(node->Left, original); //It gives error here 
    CheckTwoTimes(node->Right, original);//And maybe it will give it here 
} 

original 내가 찾고 있어요 노드입니다 :이 코드가 있습니다. 그러나 프로그램을 실행할 때 충돌이 발생하고 어떤 줄이 문제인지를 보여줍니다. 나는 틀린 것을 모른다. 어쩌면 포인터 매개 변수를 전달하지 않아도됩니다.

나는 기능이 방법 전화 : 당신이 리프 노드에받을거야 어떤 시점에서

CheckTwoTimes(root, find); //**find** is for example the most left node 
+3

자식이 null 인 경우를 대비하여 아마도 일부 null 검사를 수행해야합니다. Dereferencing null는 에러를 발생시킵니다. 어떤 생각이 든다. 어떤 오류가 발생하고 있습니까? – Borgleader

+0

고마워요. 도움이되었습니다. 나는 보통의 컴파일 에러를 얻지 못했다. Visual Studio 2010을 사용하고 프로그램을 실행하면 충돌이 발생하고 코드 앞에 작은 노란색 화살표가 나타납니다. –

답변

1

을 -이 nodeNULL을 될 것입니다 그리고 당신은 역 참조하려고 할거야 발생했을 때 그것은 (그것은 좋지 않다).

당신은 NULL에 대한 검사를 추가해야합니다 :

template<class T> 
void Tree<T>::CheckTwoTimes(Node<T> *node, Node<T> *original) 
{ 
    if (node == NULL) 
     return; 
    if (node == original) 
     cout << "This is it" << endl; 
    CheckTwoTimes(node->Left, original); 
    CheckTwoTimes(node->Right, original); 
} 

를 트리의 노드가 고유 경우, 또한 오히려 뭔가를 인쇄보다 노드에 대한 포인터를 반환하는 것이 좋습니다 수 있습니다.

관련 문제