-1
#include<stdlib.h>
#include<stdio.h>


typedef struct treenode
{
   int data;
   struct treenode *left;
   struct treenode *right;
}tnode;

tnode * insert(tnode *node,int data)
{ 
    if(node==NULL)
    {
       node=(tnode *)malloc(sizeof(tnode));
       node->data=data;
       node->left=node->right=NULL;
       return node;
    }

if(data>node->data)
{
    node->right=insert(node->right,data);
}
else if(data<node->data)
{
    node->left=insert(node->left,data);
}

return node;
 }


 tnode * find(tnode *node,int data)

  {
  if(node==NULL)
      return NULL;


if(node->data<data)
return find(node->right,data);

else if(node->data>data)
return find(node->left,data);

else
return node;
  }

 tnode* maximal(tnode *node)

{

 if(node==NULL)
    {
       return NULL;
    }

    if(node->right) 
      return maximal(node->right);

    else 
      return node;

}


 tnode* minimal(tnode *node)

 {
    if(node==NULL)
    {
       return NULL;
    }

    if(node->left) 
      return minimal(node->left);

    else 
      return node;
}

 tnode * delete(tnode *node,int data)

  {
       tnode *temp;

       if(node==NULL)
       {
              printf("Element Not Found");
       }

       else if(data < node->data)

       {
              node->left = delete(node->left, data);
       }

       else if(data > node->data)

      {
              node->right = delete(node->right, data);
      }

      else
      {
            /* Now We can delete this node and replace with either minimum element 
               in the right sub tree or maximum element in the left subtree */
            if(node->right && node->left)
            {
                    /* Here we will replace with minimum element in the right sub tree */
                    temp = minimal(node->right);
                    node -> data = temp->data; 
                    /* As we replaced it with some other node, we have to delete that node */
                    node -> right = delete(node->right,temp->data);
            }
            else
            {
                    /* If there is only one or zero children then we can directly 
                       remove it from the tree and connect its parent to its child */
                    temp = node;
                    if(node->left == NULL)
                            node = node->right;
                    else if(node->right == NULL)
                            node = node->left;
                    free(temp); /* temp is longer required */ 
            }
    }
    return node;

   }





   int main()

   {
      tnode *root=NULL,*temp;
      //int maximum,minimum;
      int op,n;
      do

         {
    printf("\n1.insertion");
    printf("\n2.deletion");
    printf("\n3.preorder");
    printf("\n4.inorder");
    printf("\n5.postorder");
    printf("\n6.minimal node");
    printf("\n7.maximum node");
    printf("\n8.find node");
    printf("\n9.quit");
    printf("\nenter your option:");
    scanf("%d",&op);

    switch(op)
    {
        case 1:
        printf("enter the element to be inserted:");
        scanf("%d",&n);
        root=insert(root,n);
        break;

        case 2:
        printf("enter the element to be deleted:");
        scanf("%d",&n);
        root=delete(root,n);
        break;

        case 6:
        temp=minimal(root);
        if(temp==NULL)
        printf("no elements in the tree");
        else
        printf("the minimum element found is:%d",temp->data);
        break;

        case 7:
        temp=maximal(root);
        if(temp==NULL)
        printf("no elements in the tree");
        else
        printf("the maximal element found is:%d",temp->data);
        break;

        case 8:
        printf("enter the element to be found:");
        scanf("%d",&n);
        temp=find(root,n);
        if(temp == NULL)
        printf("element not found");
        else
        printf("element found");
        break;

        default :
        exit(0);
    }
}while(op<9);

    return 0;

    }

*この多くのエラーをコンパイルすると、すべてのエラーが削除機能とポインターの解放方法に関連しています (2 つのエラーはポインターの解放に関連していました)。私は widows プラットフォームで gcc を使用してプログラムを実行しました。*

エラーは次のとおりです: g++.exe -x c++ -c C:\Users\HARSHA\DOCUME~1\GCCPRO~1\ps2\BINARY~2.C -o C:\Users\HARSHA\DOCUME~1\GCCPRO ~1\ps2\BINARY~2.o -Wall -fpermissive C:\Users\HARSHA\DOCUME~1\GCCPRO~1\ps2\BINARY~2.C:97: 「削除」前の解析エラー

C:\Users\HARSHA\DOCUME~1\GCCPRO~1\ps2\BINARY~2.C:120: `->' の前の構文エラー

C:\Users\HARSHA\DOCUME~1\GCCPRO~1\ps2\BINARY~2.C:122: `->' の前の構文エラー

C:\Users\HARSHA\DOCUME~1\GCCPRO~1\ps2\BINARY~2.C:133: `temp' はこのスコープで宣言されていません

C:\Users\HARSHA\DOCUME~1\GCCPRO~1\ps2\BINARY~2.C:133: 警告: ANSI C++ は、型のない「free」宣言を禁止しています

C:\Users\HARSHA\DOCUME~1\GCCPRO~1\ps2\BINARY~2.C:133: `int free' が別の種類のシンボルとして再宣言されました

...\lib\gcc-lib\i386-mingw32\2.95.2........\include\stdlib.h:271: `void free(void *)' の以前の宣言

C:\Users\HARSHA\DOCUME~1\GCCPRO~1\ps2\BINARY~2.C:134: `}' の前に解析エラーがあります

C:\Users\HARSHA\DOCUME~1\GCCPRO~1\ps2\BINARY~2.C: 関数「int main()」内:

C:\Users\HARSHA\DOCUME~1\GCCPRO~1\ps2\BINARY~2.C:174: 警告: コンマ式の左側のオペランドは無効です

C:\Users\HARSHA\DOCUME~1\GCCPRO~1\ps2\BINARY~2.C:174: type int' argument given todelete'、予期されるポインタ

失敗

4

1 に答える 1

1

g++ は、c コードではなく c++ をコンパイルします。delete は C++ の演算子であるため、関数名には使用できません。たとえば、関数 delete の名前を Delete (大文字の 'D') に変更してみてください。

于 2012-08-15T13:47:46.167 に答える