2013-04-16 15 views
0

이진 트리를 어떻게 만들 수 있습니까? 나는 구글을 통해 검색했지만 모든 바이너리 검색 tree.here 내 코드를 발견했다.이진 트리를 만드는 방법 (이진 검색 트리가 아님)

bool createTree(node* Tree,int d) 
{ 
    bool ret_val=FALSE; 
    if(Tree->d==-1) 
    { 
     Tree->d=d; 
     return TRUE; 
    } 
    else 
    { 
     node* temp=(node*)malloc(sizeof(node*)); 
     if (temp==NULL) 
      return FALSE; 
     temp->l=NULL; 
     temp->r=NULL; 
     temp->d=d; 
     if(Tree->l==NULL) 
     { 
      Tree->l=temp; 
      return TRUE; 
     } 
     else if(Tree->r==NULL) 
     { 
      Tree->r=temp; 
      return TRUE; 
     } 
     else 
     { 
      ret_val=createTree(Tree->l,d); 
      if(ret_val) 
       return TRUE; 
      else 
       return createTree(Tree->r,d); 
     } 
     return FALSE; 
    } 
} 

실행 후 값이 왼쪽 트리에 할당되고 트리의 왼쪽 부분으로 계속 이동하는 것을 볼 수 있습니다. 내 바이너리 트리를 작성하는 데 도움주세요.

+0

정확히 무엇이 문제입니까? 잘못된 결과가 나옵니까? 그러면 예상되는 결과는 무엇입니까? 우리가 잘못된 정보를 찾아내는 데 도움이되기를 원한다면 – StoryTeller

+0

아마도이 코드 시퀀스가 ​​원하는 방식으로 작동하지 않을 수 있습니까? 'temp-> l = NULL; temp-> r = NULL; if (Tree-> l == NULL) ...; else if (Tree-> r == NULL) ...; else ret_val = createTree (Tree-> l, d); ... ' – mah

+3

"이진 트리"와 "이진 검색 트리"의 차이점은 무엇입니까? –

답변

1

이 잘못이

node* temp=(node*)malloc(sizeof(node)); 

그러나 C++에서 더 나은 것 코드가

node* temp = new node; 

간단하고 그래서 당신은 덜 가능성이 쓸 수 있어야한다

node* temp=(node*)malloc(sizeof(node*)); 

오류가 발생했습니다

+0

'new'는 단순하지 않습니다. 'malloc'은 생성자가 호출되도록 보장한다. 클래스에 중요하지 않은 생성자가있는 경우, malloc을 사용하여 할당하면 결과가 UB가됩니다 (나중에 생성자를 수동으로 호출하지 않는 한). – Angew

관련 문제