Untitled
unknown
plain_text
2 years ago
2.6 kB
4
Indexable
/** * Definition for binary tree * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */ TreeNode* deleteNode(TreeNode *root, int number){ //traversalNode-> to search the value //parentNode -> parentNode of traversalNode TreeNode *traversalNode = root, *parentNode = NULL; while(traversalNode){ if(traversalNode->val == number){ break; } parentNode = traversalNode; if(traversalNode->val < number){ traversalNode = traversalNode->right; } else{ traversalNode = traversalNode->left; } } if(traversalNode == NULL){ return root; } if(traversalNode->left == NULL && traversalNode->right == NULL){ if(parentNode == NULL){ return NULL; } if(parentNode->left == traversalNode){ parentNode->left = NULL; } else{ parentNode->right = NULL; } return root; //return parentNode->right; //delete traversalNode; } else if(traversalNode->left == NULL){ if(parentNode == NULL){ root = root->right; return root; } if(parentNode->left == traversalNode){ parentNode->left = traversalNode->right; //delete traversalNode; } else{ parentNode->right = traversalNode->right; //delete traversalNode; } } else if(traversalNode->right == NULL){ if(parentNode == NULL){ root = root->left; return root; } if(parentNode->right == traversalNode){ parentNode->right = traversalNode->left; //delete traversalNode; } else{ parentNode->left = traversalNode->left; // delete traversalNode; } } else{ TreeNode *leftMaxNode = traversalNode->left; while(leftMaxNode->right != NULL){ leftMaxNode = leftMaxNode->right; } root = deleteNode(root, leftMaxNode->val); leftMaxNode->left = traversalNode->left; leftMaxNode->right = traversalNode->right; if(parentNode == NULL){ return leftMaxNode; } if(parentNode->right == traversalNode){ parentNode->right = leftMaxNode; } else{ parentNode->left = leftMaxNode; } } delete traversalNode; return root; } TreeNode* Solution::solve(TreeNode* A, int B) { return deleteNode(A, B); }
Editor is loading...