我写了三个结点插入函数,只有第一种可用,BST为二叉搜索树的根结点指针,主函数内容是展示我调用这三种函数的方法。请各位大佬帮忙看看后面两个函数为什么不能插入,谢谢各位!
//插入(递归),可用
BinTree insert_0(int a, BinTree T)
{
if(!T)
{
T=(BinTree)malloc(sizeof(BitNode));
T->data=a;
T->lchild=T->rchild=NULL;
}
else if(a<T->data) T->lchild=insert_0(a,T->lchild);
else if(a>T->data) T->rchild=insert_0(a,T->rchild);
else printf("error!与已知叶结点相同\n");
return T;
}
//插入(另一种递归),不可用
void insert_0_1(int a, BinTree T)
{
if(!T)
{
T=(BinTree)malloc(sizeof(BitNode));
T->data=a;
T->lchild=T->rchild=NULL;
}
else if(a<T->data) insert_0_1(a,T->lchild);
else if(a>T->data) insert_0_1(a,T->rchild);
else printf("error!与已知叶结点相同\n");
}
//插入(非递归),不可用
void insert_1(int a, BinTree T)
{
while(T)
{
if(a<T->data) T=T->lchild;
else if(a>T->data) T=T->rchild;
else printf("error!与已知叶结点相同\n");
}
T= (BinTree)malloc(sizeof(BitNode));
T->data=a;
T->lchild=T->rchild=NULL;
}
int main()
{
BST=insert_0(9,BST); //测试有效
insert_0_1(9,BST); //测试无效
insert_1(9,BST); //测试无效
}