typedef struct node{
ElemType key;
struct node* left, * right;
struct node* p;
}*TREE;
typedef struct {
TREE root;
}*ROOTTREE;
查找
TREE TREE_SEARCH(TREE x, int k)
{
if (x == NULL || k == x->key)
return x;
if (k < x->key)
return TREE_SEARCH(x->left, k);
else
return TREE_SEARCH(x->right, k);
}
最大关键字元素和最小关键字元素
TREE TREE_MINIMUM(TREE x)
{
while (x->left != NULL)
x = x->left;
return x;
}
TREE TREE_MAXIMUM(TREE x)
{
while (x->right != NULL)
x = x->right;
return x;
}
后继
TREE tree_successor(TREE x)
{
TREE y;
if (x->right != NULL)
return TREE_MAXIMUM(x->right);
y = x->p;
while (y != NULL && y->right = x)
{
x = y;
y = x->p;
}
return y;
}

插入
void tree_insert(ROOTTREE T,TREE z)
{
TREE x, y;
x = T->root;
while (x != NULL)
{
y = x;
if (z->key < x->key)
x = x->left;
else
x = x->right;
}
z->p = y;
if (y == NULL)
T->root = x;
else if (z->key < y->key)
y->left = z;
else
y->right = x;
}

删除
定义一个子过程transplant,用一棵子树代替另一棵子树。
void transplant(ROOTTREE T, TREE u, TREE v)
{
if (u->p == NULL)
T->root = v;
else if (u->p->left == u)
u->p->left = v;
else
u->p->right = v;
if (v != NULL)
v->p = u->p;
}
删除的情况有四种

void tree_delete(ROOTTREE T, TREE z)
{
TREE y;
if (z->left == NULL)
transplant(T, z, z->right);
else if (z->right == NULL)
transplant(T, z, z->left);
else
{
y = TREE_MAXIMUM(z->right);
if (y != z->right)
{
transplant(T, y, y->right);
y->right = z->right;
z->right->p = y;
}
transplant(T, z, y);
y->left = z->left;
y->left->p = y;
}
}
原文:https://www.cnblogs.com/KIROsola/p/12214331.html