引言
二叉搜索树(Binary Search Tree
),也称BST树、二叉搜索树、有序二叉树(ordered binary tree
),排序二叉树(sorted binary tree
).
它是指一棵空树或者具有下列性质的二叉树:
1. 任意节点的左子树不空,则左子树上所有结点的值均小于它的根结点的值;
2. 任意节点的右子树不空,则右子树上所有结点的值均大于它的根结点的值;
3. 任意节点的左、右子树也分别为二叉查找树;
4. 没有键值相等的节点。
一. 二叉搜索树定义
二叉搜索树,我们将二叉树节点的类型定义为:
1 |
|
二.二叉树搜索的接口
- bstree.h
1 |
|
三. 搜索二叉树的接口实现
- bstree.c
1 |
|
四. 函数功能检测
- main.c
1 |
|
- 运行结果
1 |
|
五. 总结
二叉查找树相比于其他数据结构的优势在于查找、插入的时间复杂度较低。为O(log n)
。二叉查找树是基础性数据结构,用于构建更为抽象的数据结构,如集合、multiset、关联数组等。
二叉查找树的查找过程和次优二叉树类似,通常采取二叉链表作为二叉查找树的存储结构。中序遍历二叉查找树可得到一个关键字的有序序列,一个无序序列可以通过构造一棵二叉查找树变成一个有序序列,构造树的过程即为对无序序列进行查找的过程。每次插入的新的结点都是二叉查找树上新的叶子结点,在进行插入操作时,不必移动其它结点,只需改动某个结点的指针,由空变为非空即可。搜索、插入、删除的复杂度等于树高,期望 O(log n)
,最坏O(n)
(数列有序,树退化成线性表)。
虽然二叉查找树的最坏效率是O(n)
,但它支持动态查询,且有很多改进版的二叉查找树可以使树高为 O(log n)
,如SBT,AVL树,红黑树等。故不失为一种好的动态查找方法。
可是嘞,我们一步一步来好了~
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Aemonair!