C++ 이진 탐색 트리 만드는 중 삽입 부분이 안돌아가요

  • Tempo
    Tempo

    binary tree에서 삽입 부분을 만들고 있는데 삽입 부분부터 실행이 안돼서 뭐가 문제인지 모르겠네요.
    Tree를 관리할 Tree , Node를 관리할 TreeNode, Main으로 구성되어 있는데요.
    소스 보시면 Tree 클래스 소스에서 수행을하다가 G를 삽입하고 그 후에 I를 삽입하는 과정에서 current->rightnode가 null이기때문에 newNode로 Node를 만들어서 current->rightnode를 새로운 노드로 지정하려고 하는데 그 부분에서 에러가 뜹니다...
    뭐가 어디서 문제인지 디버깅을 해봐도 주소가 할당이 안된것에 계속 데이터를 집어넣으려고 해서 문제가 되는것 같은데 어렵네요..
    java만 4년정도 하다가 c/c++을 하려고 하니 힘드네요 (java에서 잘 돌아가는 코드 포인터써서 c++로 만들어보고 있는 중입니다.)

    TreeNode.h
    
    #pragma once
    #include <iostream>
    class TreeNode {
    public: 
     char data;
     TreeNode *leftnode;
     TreeNode *rightnode;
    
     TreeNode::TreeNode() {
    
      printf("TreeNode create 1 \n");
      data = 0;
      leftnode = NULL;
      rightnode = NULL;
     }
    
     TreeNode::TreeNode(char d) {
      data = d;
      leftnode = NULL;
      rightnode = NULL;
     }
    
    };
    
    -----------------------
    
    Tree.cpp
    
    #include <iostream>
    #include "헤더.h"
    class Tree {
    public :
     TreeNode *root; // 루트 노드 변수 선언
    
     Tree() {
      root = new TreeNode; // 루트 노드 힙  메모리 할당
     }
    
     void insertBST(char data) {  // BST에 데이터 삽입
      *root = insertData(root, data);
     }
    
     TreeNode insertData(TreeNode *root, char data) {  // 노드를 할당하여 데이터 삽입
    
      TreeNode *current = new TreeNode();  
      current = root;  //루트 노드를 현재 노드로 지정
      TreeNode newNode(data);  // data를 저장할 노드
    
      if (current == nullptr || current->data == NULL) {   //루트 노드가 비어있거나 데이터가 NULL이면 새로운 노드 생성
       return newNode;
      }
      else {
       if (current->data >= newNode.data) { // 노드 데이터 값 비교해서 왼쪽 노드로 추가
        *current->leftnode = insertData(current->leftnode, data);
        return *current;
       }
       else { // 노드 데이터 값 비교해서 오른쪽 노드로 추가
        *current->rightnode = insertData(current->rightnode, data);
        return *current;
       }
      }
      delete current;
    
     }
    };
    
    
    -------------------------------------
    
    TreeMain.cpp
    
    #pragma once
    #include <iostream>
    #include "헤더.h"
    #include "Tree.cpp"
    
    int main() {
     int num = 0;
     Tree *bst = new Tree;
     bst->insertBST('G');
     bst->insertBST('I');
     bst->insertBST('H');
     bst->insertBST('D');
     bst->insertBST('B');
     bst->insertBST('M');
     bst->insertBST('N');
     bst->insertBST('A');
     bst->insertBST('J');
     bst->insertBST('E');
     bst->insertBST('Q');
    
    // bst 값 확인 코드는 이렇게 해두고 브랙포인트 걸어서 bst에 들어간 값 확인중입니다.
     printf("printf Binary Tree ");
    return 0;
    }
    

    7년 전
0개의 댓글이 있습니다.
  • 정회원 권한이 있어야 커멘트를 다실 수 있습니다. 정회원이 되시려면 온라인 저지에서 5문제 이상을 푸시고, 가입 후 7일 이상이 지나셔야 합니다. 현재 문제를 푸셨습니다.