插入二叉树的方法

时间:2011-12-26 06:18:29

标签: data-structures

与众不同之处在于什么? [insert_node(&(tmp-> left),value);] VS [tmp = tmp-> right; insert_node(及(TMP),值);]

void insert_node(struct btree **bt,int value)
{
     btree *tmp= *bt, *r ;

     if(*bt==NULL)// first node 
     {
          (*bt)=(struct btree *)malloc(sizeof(btree));
          (*bt)->data=value;
          (*bt)->left=NULL;
          (*bt)->right=NULL;           
     }       
     else
     {
         if(value > tmp->data)
            insert_node(&(tmp->right),value);   
         else
            insert_node(&(tmp->left),value);                 
     }

      #if 0  //start
           OR  /** COMMENT START

         earlier I had below piece of code but not working 
         can any please explain what's the difference in  
         insert_node(&(tmp->left),value); VS [ tmp=tmp->right; insert_node(&(tmp),value);]
         COMMENT END **/ 

      else
     {
         if(value > tmp->data)
            tmp=tmp->right;  
         else
            tmp=tmp->left ;
            insert_node(&tmp,value);                 
     }
   #endif //end

}

2 个答案:

答案 0 :(得分:1)

在非工作情况下,您将为其提供tmp变量的地址,从而更新指针,该指针位于堆栈中,不会用于任何内容。

在工作的情况下,你给出了bt节点中实际指针的地址,这就是你想要的。

答案 1 :(得分:0)

没有语义差异。 #2将下一个节点存储在一个局部变量中,该变量将是一个寄存器,而#1将该节点存储到寄存器中,但它不能作为局部变量使用。

如果您需要再次访问该值,请使用#2。