文章来源于网络收集而来,版权归原创者所有,如有侵权请及时联系!
8.6.2 二叉排序树插入操作
有了二叉排序树的查找函数,那么所谓的二叉排序树的插入,其实也就是将关键字放到树中的合适位置而已,来看代码。
/* 当二叉排序树T中不存在关键字等于key的数据元 素时, */ /* 插入key并返回TRUE,否则返回FALSE */ Status InsertBST(BiTree *T, int key) { 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-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]); }
在你的大脑里,是否已经有一幅随着循环语句的运行逐步生成这棵二叉排序树的动画图案呢?如果不能,那只能说明你还没真理解它的原理哦。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论