Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<iostream>
- #include<queue>
- using namespace std;
- class Node{
- public:
- int data;
- Node *left,*right;
- Node(int key){
- data=key;
- left=NULL;
- right=NULL;
- }
- };
- void DeleteDeepest( Node* root,Node* d_node){
- queue<Node*> q;
- q.push(root);
- Node* temp;
- while (!q.empty()) {
- temp = q.front();
- q.pop();
- if (temp->right) {
- if (temp->right == d_node) {
- temp->right = NULL;
- delete d_node;
- return;
- }
- else
- q.push(temp->right);
- }
- if (temp->left) {
- if (temp->left == d_node) {
- temp->left = NULL;
- delete d_node;
- return;
- }
- else
- q.push(temp->left);
- }
- }
- }
- void Delete( Node** root_ref, int key){
- if (*root_ref == NULL)
- return ;
- if ((*root_ref)->left == NULL && (*root_ref)->right== NULL) {
- if ((*root_ref)->data== key)
- *root_ref== NULL;
- return ;
- }
- queue<Node*> q;
- q.push(*root_ref);
- Node* temp;
- Node* key_node = NULL;
- while (!q.empty()) {
- temp = q.front();
- q.pop();
- if (temp->data== key)
- key_node = temp;
- if (temp->left)
- q.push(temp->left);
- if (temp->right)
- q.push(temp->right);
- }
- if (key_node != NULL) {
- int x = temp->data;
- DeleteDeepest(*root_ref,temp);
- if(key_node!=temp)
- key_node->data = x;
- }
- }
- void preorder(Node *root){
- if(root==NULL)
- return;
- cout<<" "<<root->data;
- preorder(root->left);
- preorder(root->right);
- }
- int main(){
- Node *root=NULL;
- Node *newnode=new Node(1);
- root=newnode;
- root->left=new Node(2);
- root->right=new Node(3);
- (root->left)->left=new Node(4);
- (root->right)->right=new Node(5);
- ((root->left)->left)->left=new Node(6);
- cout<<"preorder traversing : ";
- preorder(root);
- Delete(&root,1);
- cout<<endl<<"after deletion of 2 from tree :";
- preorder(root);
- return 0;
- }
Add Comment
Please, Sign In to add comment