Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- void TreeBST::del(Node* p) {
- if (empty()) {
- cout << "Drzewo puste" << endl;
- return;
- }
- if (empty(p->left()) && empty(p->right())) {
- if (p == root) {
- delete p;
- root = NULL;
- return;
- }
- if (p->parent()->left() == p) {
- p->parent()->setLeft(NULL);
- delete p;
- return;
- }
- else {
- p->parent()->setRight(NULL);
- delete p;
- return;
- }
- }
- else if (!empty(p->left()) && empty(p->right())) {
- if (p == root) {
- root = p->left();
- delete p;
- return;
- }
- if (p->parent()->left() == p) {
- p->parent()->setLeft(p->left());
- p->left()->setParent(p->parent());
- delete p;
- return;
- }
- else {
- p->parent()->setRight(p->left());
- p->left()->setParent(p->parent());
- delete p;
- return;
- }
- }
- else if (!empty(p->right()) && empty(p->left())) {
- if (p == root) {
- root = p->right();
- delete p;
- return;
- }
- if (p->parent()->left() == p) {
- p->parent()->setLeft(p->right());
- p->right()->setParent(p->parent());
- delete p;
- return;
- }
- else {
- p->parent()->setRight(p->right());
- p->right()->setParent(p->parent());
- delete p;
- return;
- }
- }
- else {
- Node* succNode = succ(p);
- if (p->right() != succNode) {
- p->right()->setParent(succNode);
- }
- if (succNode->parent() != p) {
- if (succNode->parent()->left() == succNode) {
- if (!empty(succNode->left())) {
- succNode->parent()->setLeft(succNode->left());
- }
- else {
- succNode->parent()->setLeft(succNode->right());
- }
- }
- else {
- if (!empty(succNode->right())) {
- succNode->parent()->setRight(succNode->left());
- }
- else {
- succNode->parent()->setRight(succNode->right());
- }
- }
- }
- if (p != root) {
- if (p->parent()->left() == p) {
- p->parent()->setLeft(succNode);
- }
- else {
- p->parent()->setRight(succNode);
- }
- }
- else {
- root = succNode;
- }
- succNode->setLeft(p->left());
- if (p->right() != succNode)
- succNode->setRight(p->right());
- succNode->setParent(NULL);
- delete p;
- return;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement