ikili arama ağaçlarında silme işlemi



#include<iostream>
using namespace std;
typedef struct node
{
 int data;
 node *left;
 node *right;
};
typedef struct  node *BTREE;

BTREE new_node(int veri)
{
 BTREE p=new node();
 p->data=veri;
 p->left=NULL;
 p->right=NULL;
 return p;
 
}
BTREE ekle(BTREE root,int veri)
{
 if(root!=NULL)
 {
  if(veri>=root->data)
   {
    root->right=ekle(root->right,veri);
   }
   else
   {
    root->left=ekle(root->left,veri);
   }
  
  
 }
 else
 {
  root=new_node(veri);
  
  
  
  
 }
 return root;
 
};

void preorder(BTREE root)
{
 if(root!=NULL)
  {
   cout<<root->data<<endl;
   preorder(root->left);
   preorder(root->right);
   
  }

};
void inorder(BTREE root)
{
 if(root!=NULL)
  {
   
   inorder(root->left);
   cout<<root->data<<endl;
   inorder(root->right);
   
  }

};
void postorder(BTREE root)
{
 if(root!=NULL)
  {
   
   postorder(root->left);
   postorder(root->right);
   cout<<root->data<<endl;
  }

};
int esayisi(BTREE root)
{
 if(root==NULL)
  return 0;
 else
 {
  return esayisi(root->left)+esayisi(root->right)+1;
 }
 
}




BTREE sil(BTREE root, int veri)
{
  
    if (root == NULL) 
 return NULL;
    if (veri< root->data)
        root->left = sil(root->left, veri);  
    else if (veri > root->data)
        root->right = sil(root->right,veri);
    else
    {
      
        if (root->left == NULL)
        {
            BTREE temp = root->right;
           delete root;
            return temp;
        }
        else if (root->right == NULL)
        {
           BTREE temp= root->left;
           delete root;
            return temp;
        }
 
       else{
        BTREE temp = root->right;
         BTREE temp1= root->right;
   while(temp->left!=NULL)
    temp=temp->left;  
     temp->left=root->left;
     delete root;
     return temp1;
     
        
        
       }
        
    }
    return root;
}

main()
{
BTREE root=NULL;
root=ekle(root,34);
ekle(root,24);
ekle(root,54);
ekle(root,14);
ekle(root,25);
ekle(root,53);
ekle(root,56);
//postorder(root);
//inorder(root);
//preorder(root);
//cout<<"elemansayisi:"<<esayisi(root)<<endl;
root=sil(root,34);
inorder(root);

 
}

sonraki
« Prev Post
Önceki
Next Post »
Thanks for your comment