if (node->parent->left == node) { // node is left child
node->parent->left = used_node;
node->parent->balance -= 1;
}
else { // node is right child
node->parent->right = used_node;
node->parent->balance += 1;
}
}
else {
root = (node->left ? node->left : node->right);
root->parent = NULL;
}
}
// have two children
else {
TTreeLineNode *prev_node;
// not thinking balance value
// prev_node in left child tree
prev_node = node->prev; // prev_node is the largest node in left child tree
prev_node->balance = node->balance;
//
////////////////////////////////////////////////////////////////////////////////
// Bin Tree and order Link <> Tool
// Copy Right , Written By Gan Huaxin, 2001-07-19
// Created in 2001-07-19
// modeified in 2001-07-21
// Thanks for PanXF and YuHang @ FNST
////////////////////////////////////////////////////////////////////////////////
//
struct TTreeLineNode {
void* data; // user data pointer
int balance; // Height (left) - Height (right)
// order link
TTreeLineNode *next;
TTreeLineNode *prev;
// bin tree
TTreeLineNode *left;
TTreeLineNode *right;
TTreeLineNode *parent;
};
class TBinTreeLink {
private :
TTreeLineNode *root; // bin tree root
TTreeLineNode *head; // link head
TTreeLineNode *tail; // link tail
CompareFunc compare_data; // compare data function pointer
// SearchFunc search_data; // serrch data function pointer
FreeDataFunc free_data;// node->data 's free function