Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- class Node{
- public:
- Node* left;
- Node* right;
- Node* parent;
- static Node* removeNodes(Node* node,int value){
- removeNodes(node->left,value);
- removeNodes(node->right,value);
- if(node->value==value){
- Node* aux;
- //First case, right side of the parent
- //1.Inserting left continuation of my node to the left side of parrent
- //2.Right side was my node so just mapping it to the parent's right
- if(node->parent->right==node){
- if(node->left != nullptr){
- aux=node;
- while(aux->left!=nullptr)
- aux=aux->left;
- //last left node mapped to first left child of parent
- aux->left=node->parent->left;
- node->parent->left->parent=aux;
- //first left side node mapped to parent
- node->left->parent=node->parent;
- node->parent->left=aux;
- }
- //Managing right side of the deletion
- node->parent->right=node->right;
- node->right->parent=node->parent;
- }
- //Second case, left side of parent(same process)
- //but left and right are inversed
- if(node->parent->left==node){
- if(node->right!=nullptr){
- aux=node;
- while(aux->right!=nullptr)
- aux=aux->right;
- aux->right=node->parent->right;
- node->parent->right->parent=aux;
- node->right->parent=node->parent;
- node->parent->left=aux;
- }
- node->parent->left=node->left;
- node->left->parent=node->parent;
- }
- //Case of it being root
- //Decided the best is to just take a leaf and
- //Set it as root
- else{
- aux=node;
- while(aux->right!=nullptr)
- aux=aux->right;
- aux->left=node->left;
- aux->right=node->right;
- aux->parent=nullptr;
- node=aux;
- }
- }
- if(node->parent==nullptr)
- return node;
- else return nullptr;
- }
- private:
- int value;
- };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement