二叉查找树:对于二叉查找树的任何一个节点,设这个节点的值为K,这个节点的左子树的任意一个节点的值都小于K,右子树的任何一个节点的值都大于等于K。
对于任何的二叉查找树,使用中序遍历(左根右),可以将值从小到大打印出来。
对于二叉查找树的检索,例如图a,需要检索32,那么首先需要检索根节点,发现37大于32,进入二叉搜索树的左子树,发现24小于32,然后在进入右子树,发现根节点等于32,那么就返回找到了。
对于检索35,进入的路径和上述一样,但是最后返回null,并没有找到。
对于插入新的值,我们需要将首先找到插入的位置,然后在进行插入,如果二叉树不允许插入相同的值,在二叉查找树中有这个值的存在,那么就报异常,如果允许,需要插入相同值的同样节点。对于节点值为35,插入图a,如下
从BST中删除一个节点,需要首先找到这个节点然后在进行处理,我们首先以删除一个最小值的节点为例,找到最小值的点,简单,我们只需要一直往左子树遍历下去,就可以找到最小值的点,在删除这个节点之前,需要将这个节点的父节点的指针,指向节点的右子树节点。具体的示意图如下:
接下来我们需要讨论的是删除任意一个值的节点R,这里删除有多种情况,如果R没有子节点,可以将其父节点的指针设置为NULL,如果R只有一个节点,那么将父节点的指针指向它的节点,如果有连个子节点,我们就使用一个值代替他。那么究竟是用什么样的值代替他呢?那么就是大于删除值的最小值,小于删除值的最大值。
上图中,我们使用右子树的最小值进行替代root节点。
如果BST中没有重复的值,使用左子树或者右子树的值替代,没有什么区别,但是在有重复值时,要使用右子树的值替代。