首先应该完成一个查找操作,该函数将会返回查找路径上的最后一个结点。我们可以设置一个引用形参,然后将其指针保存并且返回。那么接下来的插入操作也比较容易实现了。
/*非递归查找二叉树*/
/*若找不到,则返回查找路径上最后一个结点*/
Status SearchBST_I(BSTree T,KeyType key,BSTree &p){
p = T;
if(T == NULL) p = NULL;
while(p){
if(p->data.key == key) return OK;
else if(p->data.key > key){
if(p->lchild == NULL) break;
p = p->lchild;
}
else if(p->data.key < key){
if(p->rchild == NULL) break;
p = p->rchild;
}
}
return ERROR;
}
/*非递归二叉查找树插入操作*/
Status InsertBST_I(BSTree &T,KeyType key){
BSTree p,n;
if(SearchBST_I(T,key,p) == OK) return ERROR; //找到了,则不会插入
else{
n = (BSTree)malloc(sizeof(BSTNode));
if(n == NULL) return OVERFLOW;
n->lchild = NULL;
n->rchild = NULL;
n->data.key = key;
if(!p) T = n;
else{
if(p->data.key < key) p->rchild = n;
else p->lchild = n;
}
}
return OK;
}