2012-11-19 5 views
0

나는 나의 구조체를 포함하는 .H 파일을 가지고 있고이 파일을 편집하지해야합니다 (I 2 개 값을 삽입 할 코드를 작성했습니다C에서 이진 검색 트리에 값을 삽입 하시겠습니까?

struct KnightTree 
{ 
    int key; 
    int level; 
    int balance;   //will be used in AVL only, and be ignored in other cases. 
    KnightTree* pLeftChild; 
    KnightTree* pRightChild; 
}; 

그리고 여기 내 코드 쓰기 .cpp 파일을 BST에로) 키 레벨 : 나는 그것을 실행할 때

void BSTinsert(KnightTree* tree, int k, int lvl) 
{ 
    KnightTree* newnode; 
    if (tree == NULL) 
    { 
     newnode->key=k; 
     newnode->level=lvl; 
     newnode->pLeftChild=NULL; 
     newnode->pRightChild=NULL; 
     tree = newnode; 
    } 
    else 
    { 
     if (tree->key > k) 
      BSTinsert(tree->pLeftChild,k,lvl); 
     else if (tree->key <= k) 
      BSTinsert(tree->pRightChild,k,lvl); 
    } 
} 

하지만, 콘솔 자체가 약 3 초 오류 팝업은 "생각은" 그래서 난 에있다 "exe 인 작동이 중지되었습니다"라고 프로그램을 닫으십시오. 지금 ... 나는 비주얼 사용하고 난의 간단한 생각하지만 난 좀 혼동하고있어 C++ 6.0 (I이 이전 버전을 사용해야합니다 ...)

가 너희들을 감사합니다!

+0

는 일반적으로 이러한 오류가 버퍼에 관련된 코드를 디버깅했고, 버퍼가 버퍼를 작성 버퍼의 할당 크기는 인쇄 문을 넣을 수 있습니다 그리고 우리가 두 가지로 갈 수 있도록, 전체 코드를 포함하지 않았다 어떤 코드 블록에 문제가 있는지 알아보십시오. –

+0

무한 루프가 있다고 생각합니다. 첫 번째 else 문에서 매번 스스로 실행하고 있습니다. 처음에 당신이 BSTInsert로 전화 (트리 -> pLeftChild, K, LVL) "경우 다른"부분에 빠지지 자체를 다시 실행하고 다음 다음부터, 항상 경우 "이 같은 지역에 해당합니다 (트리 - > 키 <= K) .. (항상 == 제 1 회 실행 후 K) ... 적어도 내가 디버깅 할 때이 경우 : – FreudianSlip

답변

2

당신은 적어도 2 중요한 문제가 있습니다

  1. 를 해결하여 방금 메모리 손상을 만들 수 있도록, 당신의 newnode 메모리를 할당하지 않습니다.
  2. 당신은 나무에 필요한 링크를 생성하지 않습니다 tree = newnode을 할당, 트리에 새로 만든 노드를 연결하지 않습니다.

이이 문제를 해결에서 진행합니다.

그리고 한 가지 더 : 여기에 질문을 게시하기 전에 디버그을 시도해 보셨습니까?

+0

생각, 그것은 말했다, "액세스 위반". 2 가지 문제를 시도해 보겠습니다. 감사합니다! –