2013-03-30 5 views
1
나는 특정 데이터 내 트리에있는 경우 결정하기 위해 코드를 작성하는 데 문제가

이합니다 (BinaryTreeNode 클래스 I 완료하는 데 필요한 기능이이진 검색 트리 회원 기능

class BinaryTreeNode { 
    public: 
    Data * nodeData; 
    BinaryTreeNode * left; 
    BinaryTreeNode * right; 

에게 변화 할 수있다 이 정의)

bool BinaryTreeNode::member(Data * data) const { 

나는 = currentnode처럼이를 변수를 생성 한 다음, 아래로 진행 currentnode를 업데이트하는 나무의 측면 확인하기 위해 while 루프를 사용하려고했지만, 나는 수없는 것 그것을 작동 시키려면. 그래서 재귀로 수행해야 할 것 같아요? 나는 그것을 시도했지만 프로그램이 잠긴다.

누구든지 올바른 방향으로 나를 가리킬 수 있다면 매우 유용 할 것입니다.

은 여기 내 많은 시도 중 하나 (이 시도 재귀)입니다 :

그 함수의 최초의 호출에
bool BinaryTreeNode::member(Data * data) const { 
    if(nodeData == NULL) { 
     return false; 
    } 
    else if (nodeData->compareTo(data) == 0) { 
     return true; 
    } 
    while(this != NULL) { 
     if(nodeData->compareTo(data) == 0) { 
      return true; 
     } 
     else if(nodeData->compareTo(data) == 1) { 
      return left->member(data); 
     } 
     else if(nodeData->compareTo(data) == -1) { 
      return right->member(data); 
     } 
    } 

    return false; 
} 
+1

우리가 디버그하는 데 도움이되도록 시도한 코드를 게시 할 수 있습니까? – Pradheep

+0

시도가 모두 성공할 수 있습니다. 그러나 버그가 어디에 있는지 분명히 말할 수는 없습니다. –

+0

내 재귀 시도로 작전을 편집했습니다 –

답변

1
while(this != NULL) 

, thisNULL로 변경하지 않습니다.

한 줄을 완전히 삭제할 수 있습니다. 그런 다음 두 지점에서 NULL을 확인하십시오.

if(left && nodeData->compareTo(data) == 1) { 
     return left->member(data); 
    } 
    if(right && nodeData->compareTo(data) == -1) { 
     return right->member(data); 
    } 

왼쪽 및 오른쪽 트리를 반복적으로 확인하면 완료됩니다.

+0

@SeanLafferty 사용해보기. :) –

+0

@SeanLafferty 질문에있는 코드를 업데이트하십시오. –