#include <iostream>
#include <cstdlib>
struct notesTree
{
int nProdID;
notesTree* pLeftChild;
notesTree* pRightChild;
notesTree(int prod_id)
: nProdID(prod_id)
, pLeftChild()
, pRightChild()
{};
notesTree(const notesTree& obj)
: nProdID(obj.nProdID)
, pLeftChild()
, pRightChild()
{};
};
void RemoveItem(notesTree** pp, int id)
{
while (*pp)
{
if (id < (*pp)->nProdID)
pp = &(*pp)->pLeftChild;
else if ((*pp)->nProdID < id)
pp = &(*pp)->pRightChild;
else break;
}
if (*pp)
{
// save the victim pointer
notesTree *victim = *pp;
// move the left tree up a level
*pp = victim->pLeftChild;
// hang the victim's right child on the
// first null-right pointer in the left tree
while (*pp)
pp = &(*pp)->pRightChild;
*pp = victim->pRightChild;
delete victim;
}
}
void InserItem(notesTree **pp, int id)
{
while (*pp)
{
if (id < (*pp)->nProdID)
pp = &(*pp)->pLeftChild;
else if ((*pp)->nProdID < id)
pp = &(*pp)->pRightChild;
else break;
}
if (!*pp)
*pp = new notesTree(id);
}
void InOrder(notesTree *p)
{
if (!p)
return;
InOrder(p->pLeftChild);
std::cout << p->nProdID << ' ';
InOrder(p->pRightChild);
}
int main()
{
notesTree *root = NULL;
InserItem(&root, 5);
InserItem(&root, 2);
InserItem(&root, 1);
InserItem(&root, 3);
InserItem(&root, 4);
InserItem(&root, 7);
InserItem(&root, 6);
InserItem(&root, 8);
InserItem(&root, 9);
InOrder(root);
std::cout << std::endl;
RemoveItem(&root, 5);
InOrder(root);
std::cout << std::endl;
RemoveItem(&root, 6);
InOrder(root);
std::cout << std::endl;
RemoveItem(&root, 1);
InOrder(root);
std::cout << std::endl;
RemoveItem(&root, 8);
InOrder(root);
std::cout << std::endl;
return EXIT_SUCCESS;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8Y3N0ZGxpYj4KCnN0cnVjdCBub3Rlc1RyZWUKewogICAgaW50IG5Qcm9kSUQ7CiAgICBub3Rlc1RyZWUqIHBMZWZ0Q2hpbGQ7CiAgICBub3Rlc1RyZWUqIHBSaWdodENoaWxkOwogICAgCiAgICBub3Rlc1RyZWUoaW50IHByb2RfaWQpCiAgICAgICAgOiBuUHJvZElEKHByb2RfaWQpCiAgICAgICAgLCBwTGVmdENoaWxkKCkKICAgICAgICAsIHBSaWdodENoaWxkKCkKICAgIHt9OwogICAgCiAgICBub3Rlc1RyZWUoY29uc3Qgbm90ZXNUcmVlJiBvYmopCiAgICAgICAgOiBuUHJvZElEKG9iai5uUHJvZElEKQogICAgICAgICwgcExlZnRDaGlsZCgpCiAgICAgICAgLCBwUmlnaHRDaGlsZCgpCiAgICB7fTsKfTsKCnZvaWQgUmVtb3ZlSXRlbShub3Rlc1RyZWUqKiBwcCwgaW50IGlkKQp7CiAgICB3aGlsZSAoKnBwKQogICAgewogICAgICAgIGlmIChpZCA8ICgqcHApLT5uUHJvZElEKQogICAgICAgICAgICBwcCA9ICYoKnBwKS0+cExlZnRDaGlsZDsKICAgICAgICBlbHNlIGlmICgoKnBwKS0+blByb2RJRCA8IGlkKQogICAgICAgICAgICBwcCA9ICYoKnBwKS0+cFJpZ2h0Q2hpbGQ7CiAgICAgICAgZWxzZSBicmVhazsKICAgIH0KICAgIAogICAgaWYgKCpwcCkKICAgIHsKICAgICAgICAvLyBzYXZlIHRoZSB2aWN0aW0gcG9pbnRlcgogICAgICAgIG5vdGVzVHJlZSAqdmljdGltID0gKnBwOwogICAgICAgIAogICAgICAgIC8vIG1vdmUgdGhlIGxlZnQgdHJlZSB1cCBhIGxldmVsCiAgICAgICAgKnBwID0gdmljdGltLT5wTGVmdENoaWxkOwogICAgICAgIAogICAgICAgIC8vIGhhbmcgdGhlIHZpY3RpbSdzIHJpZ2h0IGNoaWxkIG9uIHRoZQogICAgICAgIC8vICBmaXJzdCBudWxsLXJpZ2h0IHBvaW50ZXIgaW4gdGhlIGxlZnQgdHJlZQogICAgICAgIHdoaWxlICgqcHApCiAgICAgICAgICAgIHBwID0gJigqcHApLT5wUmlnaHRDaGlsZDsKICAgICAgICAqcHAgPSB2aWN0aW0tPnBSaWdodENoaWxkOwogICAgICAgIAogICAgICAgIGRlbGV0ZSB2aWN0aW07CiAgICB9Cn0KCnZvaWQgSW5zZXJJdGVtKG5vdGVzVHJlZSAqKnBwLCBpbnQgaWQpCnsKICAgIHdoaWxlICgqcHApCiAgICB7CiAgICAgICAgaWYgKGlkIDwgKCpwcCktPm5Qcm9kSUQpCiAgICAgICAgICAgIHBwID0gJigqcHApLT5wTGVmdENoaWxkOwogICAgICAgIGVsc2UgaWYgKCgqcHApLT5uUHJvZElEIDwgaWQpCiAgICAgICAgICAgIHBwID0gJigqcHApLT5wUmlnaHRDaGlsZDsKICAgICAgICBlbHNlIGJyZWFrOwogICAgfQogICAgCiAgICBpZiAoISpwcCkKICAgICAgICAqcHAgPSBuZXcgbm90ZXNUcmVlKGlkKTsKfQoKdm9pZCBJbk9yZGVyKG5vdGVzVHJlZSAqcCkKewogICAgaWYgKCFwKQogICAgICAgIHJldHVybjsKICAgIEluT3JkZXIocC0+cExlZnRDaGlsZCk7CiAgICBzdGQ6OmNvdXQgPDwgcC0+blByb2RJRCA8PCAnICc7CiAgICBJbk9yZGVyKHAtPnBSaWdodENoaWxkKTsKfQoKCmludCBtYWluKCkKewogICAgbm90ZXNUcmVlICpyb290ID0gTlVMTDsKICAgIAogICAgSW5zZXJJdGVtKCZyb290LCA1KTsKICAgIEluc2VySXRlbSgmcm9vdCwgMik7CiAgICBJbnNlckl0ZW0oJnJvb3QsIDEpOwogICAgSW5zZXJJdGVtKCZyb290LCAzKTsKICAgIEluc2VySXRlbSgmcm9vdCwgNCk7CiAgICBJbnNlckl0ZW0oJnJvb3QsIDcpOwogICAgSW5zZXJJdGVtKCZyb290LCA2KTsKICAgIEluc2VySXRlbSgmcm9vdCwgOCk7CiAgICBJbnNlckl0ZW0oJnJvb3QsIDkpOwogICAgCiAgICBJbk9yZGVyKHJvb3QpOwogICAgc3RkOjpjb3V0IDw8IHN0ZDo6ZW5kbDsKICAgIAogICAgUmVtb3ZlSXRlbSgmcm9vdCwgNSk7CiAgICBJbk9yZGVyKHJvb3QpOwogICAgc3RkOjpjb3V0IDw8IHN0ZDo6ZW5kbDsKICAgIAogICAgUmVtb3ZlSXRlbSgmcm9vdCwgNik7CiAgICBJbk9yZGVyKHJvb3QpOwogICAgc3RkOjpjb3V0IDw8IHN0ZDo6ZW5kbDsKICAgIAogICAgUmVtb3ZlSXRlbSgmcm9vdCwgMSk7CiAgICBJbk9yZGVyKHJvb3QpOwogICAgc3RkOjpjb3V0IDw8IHN0ZDo6ZW5kbDsKICAgIAogICAgUmVtb3ZlSXRlbSgmcm9vdCwgOCk7CiAgICBJbk9yZGVyKHJvb3QpOwogICAgc3RkOjpjb3V0IDw8IHN0ZDo6ZW5kbDsKICAgIAogICAgcmV0dXJuIEVYSVRfU1VDQ0VTUzsKfQ==