二叉搜索树总结

645 阅读2分钟

什么是二叉搜索树?

二叉查找树 / 二叉搜索树 (Binary Search Tree)有序二叉树(Ordered binary tree)或排序二叉树(Sorted binary tree), 指的是满足特定条件下的二叉树或者一颗空树

满足二叉查找树的条件:

  • 若任意节点的左子树不空,则所有的左子树上的节点的值都它的小于根节点的值
  • 若任意节点的右子树不空,则所有的右子树的节点的值都大于它的根节点的值
  • 任意节点的左右子树也分别为二叉搜索树

二叉搜索树的优势

相对其它数据结构 查找 插入的时间复杂度较低为O(log n)

二叉搜索树的特点

  • 中序遍历二叉查找树可以得到一个关键字的有序序列,
  • 一个无序序列可以通过构建二叉查找树变成一个有序序列,构建的过程就是对无序序列的过程,每次插入的节点都是二叉查找树的子节点,在插入操作时,不必移动其它节点,只需改动节点指针,由空变成非空即可
  • 搜索 删除 插入的复杂度等于树高,期望O(logn), 最坏O(n)(变成线性树)

二叉查找树的查找算法

在二叉查找树b中查找x的过程为:

  1. 若tree为空,则查找失败
  2. 若x等于tree的根节点的数据域的值,查找成功
  3. 若x小于tree的根节点的数据域的值,则继续搜索左子树
  4. 以上条件都不满足,查找右子树
///二叉查找树  查找过程
BinaryTree *searchBinaryTree(myType x, BinaryTree *tree) {

    if (tree ==  NULL) {
        return NULL;
    }

    if (x < tree -> data) {
        ///小于节点,去左节点查找
        searchBinaryTree(x, tree -> leftChild);
    }
    else if (x > tree -> data) {
        ///大于节点,去右节点查找
        searchBinaryTree(x, tree -> rightChild);
    }
    return tree;

}

二叉查找树 查找最小值

///二叉查找树 查找最小值
BinaryTree *searchMin(BinaryTree *tree) {

    ///遍历左子树 就可以取到最小值
    if (tree ==  NULL) {
        return NULL;
    }
    else if (tree -> leftChild == NULL) {
        return tree;
    }
    else {
        return searchMin(tree);
    }
}