二叉查找树(Binary Search Treee),也称二叉搜索树,是指一课空树或者具有下列性质的二叉树:
- 若任意节点的左子树不空,则左子树上所有节点的值均小于它的根节点的值;
- 若任意节点的右子树不空,则右子树上所有节点的值均大于或等于它的根节点的值;
- 任意节点的左、右子树也分别为二叉搜索树;
二叉搜索树相比其他数据结构的优势在于查找、插入的时间复杂度较低。为O(log n)
插入
向一个二叉搜索树b中插入一个节点s的算法过程为:
- 若b是空树,则将s所指节点作为根节点插入,否则:
- 若s->data 等于b的根节点的数据域之值,则返沪,否则:
- 若s->data小于b的根节点的数据域之值,则把s所指节点插入到左子树中,否则:
- 把s所指节点插入到右子树中。(新插入节点总是叶子节点)
1 | /* 当二元搜尋樹T中不存在关键字等于e.key的数据元素时,插入e并返回TRUE,否则返回 FALSE */ |
查找
在二叉搜索树b中查找x的过程为:
- 若b是空树,则搜索失败,否则:
- 若x等于b的根节点的数据域之值,则查找成功;否则:
- 若x小于b的根节点的数据域之值,则搜索左子树;否则:
- 查找右子树
1 | Status SearchBST(BiTree T, KeyType key, BiTree f, BiTree &p) { |
遍历
中序遍历 二叉查找树的Python代码:
1 | if node is None: |
Code
1 |
|