2013-04-16 218 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-'> 1 = NULL; TEMP-> R = NULL;如果(樹形>升== NULL)...; else if(Tree-> r == NULL)...;否則ret_val = createTree(Tree-> l,d); ...' – mah

+3

「二叉樹」和「二叉搜索樹」有什麼區別? –

回答

1

此錯誤

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

應該

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

但在C++代碼倒不如寫

node* temp = new node; 

,其結構簡單,所以你不太可能發生錯誤

+0

'new'不僅僅是簡單。它還確保構造函數被調用,而'malloc'不會。如果類有一個不平凡的構造函數,那麼使用'malloc'來分配它將導致UB(除非稍後手動調用構造函數)。 – Angew