创建节点
typedef char NodeType;
typedef struct SearchNode
{
NodeType data;
SearchNode * lchild;
SearchNode * lchild;
}SearchNode;
SearchNode *CreateSearchNode(NodeType value)
{
SearchNode* node = (SearchNode*)malloc(sizeof(SearchNode)) ;
assert(node != NULL);
node->data = value;
node->lchild = NULL;
node->rchild = NULL;
return node;
}
二叉搜索树插入(递归)
void SearchTreeInsert(SearchNode** proot, NodeType value)
{
if (proot == NULL)
{
return;
}
//1.找到根节点或者子节点,插入节点
if(*proot == NULL)
{
SearchNode * node = CreateSearchNode(value);
*proot = node;
}
SearchNode * tmp = *proot;
if(tmp ->data >value)
{
SearchTreeInsert(&(tmp->lchild),value);
}
if(tmp ->data <value)
{
SearchTreeInsert(&(tmp->rchild),value);
}
//2.==时不处理
else
return;
}
二叉搜索树插入(迭代)
void SearchTreeInsert(SearchNode** proot, NodeType value)
{
if (proot == NULL)
{
return;
}
SearchNode** link = proot;
SearchNode * current;
while((current= *link ) != NULL)
{
if(value < current->data)
link = &(current->lchild);
else
{
assert(value != current->data );
link = &(current->rchild);
}
}
current = CreateSearchNode(value);
*link = current;
}