2013-04-16 167 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