性质:
- 若它的左子树不空,则左子树上所有结点的值均小于它根结点的值。
- 若它的右子树不空,则右子树上所有结点的值均大于它根结点的值。
- 它的左、右树又分为二叉排序树
构建:
- 只要左子树为空,就把小于父节点的数插入作为左子树
- 只要右子树为空,就把大于父节点的数插入作为右子树
- 如果不为空,就一直往下去搜索,直到找到合适的插入位置
查找:
- 与二分查找相似,相当于在有序数列中查找
删除:
1.被删除结点 D 为叶子结点:
- 直接从二叉排序中删除即可,不会影响到其他结点
2.被删除结点 D 仅有一个孩子:
- 如果只有左孩子,没有右孩子,那么只要把要删除结点 D 的左孩子连接到要删除结点 D 的父亲结点,然后删除 D 结点
- 如果只有右孩子,没有左孩子,那么只要将要删除结点 D 的右孩子连接到要删除结点 D 的父亲结点,然后删除 D 结点
3.被删除结点 D 左右孩子都在:
- 方法一:找到 D 的后继节点 y ,因为 y 一定没有左子树,所以可以直接删除 y ,并 让 y 的父亲节点成为 y 的右子树的父亲节点。用 y 替换 D 。
- 方法二:找到 D 的前驱节点 x ,因为 x 一定没有右子树,所以可以直接删除 x ,并 让 x 的父亲节点成为 x 的左子树的父亲节点。用 x 替换 D 。