二叉查找数

二叉查找树,或者是一颗空树,具备以下性质得二叉树:

1,若它的左子树不空,则其左子树上的所有结点的值均小于它根结点的值;

2,若它的右子树不空,则其右子树上的所有结点的值均大于它根结点的值;

3,它的左、右子树也分别为二叉查找树

具体如下图:

                                                                   二叉查找数

查找操作:

 在二叉查找树中查找x的过程如下:

              1、若二叉树是空树,则查找失败。

              2、若x等于根结点的数据,则查找成功,否则。

              3,若x小于根结点的数据,则递归查找其左子树,否则。

              4,递归查找其右子树。

 

插入操作:

二叉树查找树b插入操作x的过程如下:

              1、若b是空树,则直接将插入的结点作为根结点插入。

              2、x等于b的根结点的数据的值,则直接返回,否则。

              3、若x小于b的根结点的数据的值,则将x要插入的结点的位置改变为b的左子树,否则。

              4,将x要出入的结点的位置改变为b的右子树。

 

删除操作:

于二叉查找树的删除操作(这里根据值删除,而非结点)分三种情况:

              1、如果结点为叶子结点(没有左、右子树),此时删除该结点不会玻化树的结构,直接删除即可,并修改其父结点指向它的引用为null.如下图:

 

                                         二叉查找数

 

                 2、如果其结点只包含左子树,或者右子树的话,此时直接删除该结点,并将其左子树或者右子树设置为其父结点的左子树或者右子树即可,此操作不会破坏树结构。如下图:

 

                                        二叉查找数

 

                  3、 当结点的左右子树都不空的时候,一般的删除策略是用其右子树的最小数据,代替要删除的结点数据并递归删除该结点(此时为null),因为右子树的最小结点不可能有左孩子,所以第二次删除较为容易。z的左子树和右子树均不空。找到z的后继y,因为y一定没有左子树,所以可以删除y,并让y的父亲节点成为y的右子树的父亲节点,并用y的值代替z的值.如图:
 

                                        二叉查找数