0

これは私に解決策を与えていないcの関数です

 struct node* serch(struct node *ptr,int x)

 {

   if(ptr->data==x)
   {     
     printf(" root of tree itself ");
   }
   else
   {     
     struct node *ptr1,*ptr2;
     ptr1=ptr->left;
     ptr2=ptr->right;

     while((ptr1->data!=x)&&(ptr2->data!=x))
     {
         if(ptr->data>x)
         {
             ptr=ptr1;
             ptr1=ptr->left;
             ptr2=ptr->right;
         }

         else if(ptr->data<x)
         {
             ptr=ptr2;
             ptr1=ptr->left;
             ptr2=ptr->right;
         }
     }
     return ptr;
   }
 }

THEコードは、ノードが両方の子を持つ場合に正常に機能します(特に、ツリーのバランスが取れているレベルまでは正常に機能します)が、その後は機能せず、エラーが発生します

parentnode.exe が動作を停止しました。Windows が解決策を確認しています。

4

1 に答える 1

0

いくつかのバグがあります

  1. あなたはケースのために何かを返していませんptr->data==x。C コンパイラは、すべてのパスが値を返すわけではないという警告を出すはずです。

  2. あなたはnullをチェックしていません

于 2013-10-07T19:22:17.697 に答える