вставить метод двоичного дерева - PullRequest
0 голосов
/ 26 декабря 2011

в чем разница в
[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 ]

1 голос
/ 26 декабря 2011

В нерабочем случае вы даете ему адрес вашей переменной tmp и, следовательно, обновляете этот указатель, который находится в вашем стеке и не будет использоваться ни для чего.

ВВ рабочем случае вы даете адрес фактического указателя в вашем узле bt, который вам нужен.

0 голосов
/ 26 декабря 2011

Семантической разницы нет. # 2 хранит следующий узел в локальной переменной, которая будет регистром, тогда как # 1 хранит узел в регистре, но он не будет доступен как локальная переменная.

Если вам нужно снова получить доступ к значению, используйте # 2.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...