二叉查找树定义:二叉查找树是一种二叉树,它的项可以按序排列.对于每一个节点x,节点x的值大于x的左子树中所有节点的值,而小于x的右子树中所有节点的值.
这种顺序的重要性质:二叉查找树的中序遍历按值的递增顺序访问节点.
而存储在二叉查找树中的数据必须是可排序的.
二叉查找树的基本操作:查找
首先把目标项和根节点比较
如果相等,那么搜索成功,返回
如果目标项小于根节点,那么递归地在左子树上搜索
如果目标项大于根节点,那么递归地在右子树上搜索
如果遇到节点是null,那么搜索失败,终止
二叉查找树的基本操作:插入
为了插入一个值,搜索过程需要失败,并把新节点插入到搜索失败的地方
搜索失败的地方是一个空节点,所以新插入的节点总是一个叶子节点
二叉查找树的基本操作:删除
首先,搜索到删除项的位置,如果没有搜索到删除项,就没有该节点.
如果搜索到的删除项X是:
1.叶节点.
直接删除
2.有一个孩子的节点.
1) x是父节点的左子树:让x的子节点称为x的父节点的左孩子,然后删除节点x
2)x是父节点的右子树:让x的子节点称为x的父节点的右孩子,然后删除节点x
3.有两个孩子的节点.
1)x的中序前驱没有两个孩子,首先把中序前驱的值复制给x,然后用第1或第2种方式删除中序前驱节点
2)x的中序后继没有两个孩子,首先把中序后继的值复制给x,然后用第1或第2种方式删除中序后继节点
从运行时间来看,最坏可能是二叉查找树的结构是偏斜树(所有的节点没有左节点或所有的节点没有右节点)
此时,进行搜索时就变成了顺序搜索,运行时间是O(n)
所以,平衡二叉树是更理想的.