jain12

Deleting a node in a binary tree

Mar 6th, 2020
79
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.96 KB | None | 0 0
  1. #include<iostream>
  2. #include<queue>
  3. using namespace std;
  4.  
  5. class Node{
  6.   public:
  7.       int data;
  8.       Node *left,*right;
  9.       Node(int key){
  10.         data=key;
  11.         left=NULL;
  12.         right=NULL;
  13.         }
  14.   };
  15.  
  16. void DeleteDeepest( Node* root,Node* d_node){
  17.   queue<Node*> q;
  18.   q.push(root);
  19.   Node* temp;
  20.   while (!q.empty()) {
  21.     temp = q.front();
  22.     q.pop();
  23.     if (temp->right) {
  24.       if (temp->right == d_node) {
  25.         temp->right = NULL;
  26.         delete d_node;
  27.         return;
  28.         }
  29.       else
  30.         q.push(temp->right);
  31.       }
  32.     if (temp->left) {
  33.       if (temp->left == d_node) {
  34.         temp->left = NULL;
  35.         delete d_node;
  36.         return;
  37.         }
  38.       else
  39.         q.push(temp->left);
  40.       }
  41.     }
  42.   }
  43.  
  44. void Delete( Node** root_ref, int key){
  45.  if (*root_ref == NULL)
  46.     return ;
  47.  if ((*root_ref)->left == NULL && (*root_ref)->right== NULL) {
  48.     if ((*root_ref)->data== key)
  49.         *root_ref== NULL;
  50.     return ;
  51.     }
  52.  queue<Node*> q;
  53.  q.push(*root_ref);
  54.  Node* temp;
  55.  Node* key_node = NULL;
  56.  while (!q.empty()) {
  57.     temp = q.front();
  58.     q.pop();
  59.     if (temp->data== key)
  60.         key_node = temp;
  61.     if (temp->left)
  62.         q.push(temp->left);
  63.     if (temp->right)
  64.         q.push(temp->right);
  65.     }
  66.  if (key_node != NULL) {
  67.     int x = temp->data;
  68.     DeleteDeepest(*root_ref,temp);
  69.     if(key_node!=temp)
  70.     key_node->data = x;
  71.     }
  72.  }
  73.  
  74. void preorder(Node *root){
  75.   if(root==NULL)
  76.      return;
  77.   cout<<" "<<root->data;
  78.   preorder(root->left);
  79.   preorder(root->right);
  80.   }
  81.  
  82. int main(){
  83.   Node *root=NULL;
  84.   Node *newnode=new Node(1);
  85.   root=newnode;
  86.   root->left=new Node(2);
  87.   root->right=new Node(3);
  88.   (root->left)->left=new Node(4);
  89.   (root->right)->right=new Node(5);
  90.   ((root->left)->left)->left=new Node(6);
  91.   cout<<"preorder traversing : ";
  92.   preorder(root);
  93.   Delete(&root,1);
  94.   cout<<endl<<"after deletion of 2 from tree :";
  95.   preorder(root);
  96.   return 0;
  97.   }
Add Comment
Please, Sign In to add comment