概念
二叉搜索树又称二叉排序树,它或者是一颗空树,或是具有以下性质的树
- 若它的左子树不为空,则它的所有左子树上的节点都小于根节点的值
- 若它的右子树不为空,则它的所有右子树上的节点都小于根节点的值
- 它的左右子树也分别为二叉搜索树
二叉树的操作
二叉树的插入
- 将插入节点与根节点进行比较,比根节点大的向右走,比根节点小的向左走,一直向下走直到找到位置
二叉树的删除
首先查找元素是否在二叉搜索树中,如果不存在,则返回,否则要删除的节点可能分为以下四种情况
- 要删除的节点无孩子节点
- 要删除的节点只有左孩子节点
- 要删除的节点只有右孩子节点
- 要删除的节点有左孩子也有有孩子节点
处理这四种情况也很简单
- 情况1,直接删除该节点
- 情况2,删除该节点且使被删除节点的双亲节点指向被删除节点的左孩子节点
- 情况3,删除该节点且是被删除节点的双亲节点指向被删除节点的右孩子节点
- 情况4,在它的右子树中序遍历的第一个节点,用它的值填补到被删除节点中,再来处理这个节点,这个节点分为两种情况,也就是情况1和情况3
二叉搜索树的性能分析
插入和删除操作都必须先查找,查找效率代表了二叉搜索树中各个操作的性能
对有n个节点的二叉搜索树,若每个元素查找的概率相等,则二叉搜索树平均查找长度是节点在二叉搜索树的深度的函数,即节点越深,则比较次数越多
但对于同一个关键码集合,如果各关键码插入的次序不同,可能得到不同结构的二叉搜索树
最优情况下,二叉树为平衡二叉搜索树,其平均比较次数为log2N
最差情况下,二叉树退化为单支树,其平均比较次数为N/2