//使用一个标志位进行改写,在一个函数里进行完成搜索和插入操作
typedef struct BSTNode *PBSTNode,NNSTNode;
#define key(A) (A)
#define NULLitem 0
#define eq(A,B) (key(A) == key(B))
typedef int Key;
typedef int Item;
struct BSTNode
{
Item data;
PBSTNode left;
PBSTNode right;
int N;
}__attribute__((aligned(sizeof(int))));
PBSTNode header,z;//z为哑节点,就是外节点
PBSTNode BSTsub(PBSTNode link,Item item,int *flag)
{
if (!link)
{
return NEW(item,NULL, NULL, 1);
}
Key t = key(link->data);
if (t == key(item))
{
*flag = 1;
return link;
}
else if (t > key(item))
{
link->left = BSTsub(link->left,item,flag);
}
else
{
link->right = BSTsub(link->right,item,flag);
}
if (*flag == 0)
{
link->N++;
}
return link;
}
void BSTsearchinsert(Item item)
{
if (header == z)
{
header = NEW(item,NULL, NULL, 1);
return;
}
int flag = 0;
header = BSTsub(header,item,&flag);
}