有了二叉排序树的查找函数,那么所谓的二叉排序树的插入,其实也就是将关键字放到树中的合适位置而已,来看代码。
/*当二叉排序树T中不存在关键字等于key的数据元素时,插入key并返回TRUE,否则返回FALSE*/
StatusInsertBST(BiTree*T,intkey){
BiTree p, s;
/* 查找不成功 */
if (!SearchBST(*T, key, NULL, &p)){
s = (BiTree)malloc(sizeof(BiTNode));
s->data = key;
s->lchild = s->rchild = NULL;
if (!p)
/* 插入s为新的根结点 */
*T = s;
else if (key < p->data)
/* 插入s为左孩子 */
p->lchild = s;
else
/* 插入s为右孩子 */
p->rchild = s;
return TRUE;
}
else
/* 树中已有关键字相同的结点,不再插入 */
return FALSE;
}
这段代码非常简单。如果你调用函数是“In-sertBST(&T,93);”,那么结果就是FALSE,如果是“InsertBST(&T,95);”,那么一定就是在93的结点增加一个右孩子95,并且返回True。如图8-6-7所示。
有了二叉排序树的插入代码,我们要实现二叉排序树的构建就非常容易了。下面的代码就可以创建一棵图8-6-3这样的树。
int i;
int a[10] = { 62, 88, 58, 47, 35, 73, 51,99, 37, 93 };
BiTree T = NULL;
for (i = 0; i < 10; i++){
InsertBST(&T, a[i]);
}