二叉查找树的基本操作

来源:互联网 发布:股票作手回忆录知乎 编辑:程序博客网 时间:2024/05/17 02:40

本总结是是个人为防止遗忘而作,不得转载和商用。

二叉查找树

         二叉查找树(二叉搜索树)是满足以下条件的二叉树:

                   左子树上的所有结点值均小于根结点值,

                   右子树上的所有结点值均不小于根结点值,

                   左右子树也满足上述两个条件

查找

         给定一颗二叉查找树,查找某结点p的过程如下:

                   将当前结点cur赋值为根结点root;

                   若p的值小于当前结点cur的值,查找cur的左子树;

                   若p的值不小于当前结点cur的值,查找cur的右子树;

                   递归上述过程,直到cur的值等于p的值或者cur为空;

         当然,若结点是结构体,注意定义“小于”“不小于”“等于”的具体函数。

插入

         插入过程如下:

                   若当前的二叉查找树为空,则插入的元素为根结点;

                   若插入的元素值小于根结点值,则将元素插入到左子树中;

                   若插入的元素值不小于根结点值,则将元素插入到右子树中;

                   递归上述过程,直到找到插入点为叶子结点。

删除

         记待删除的结点为p,分三种情况进行处理:

                   p为叶子结点

                   p为单支结点

                   p的左子树和右子树均不空

p为叶子结点

         p为叶子结点,直接删除该结点,再修改p的父结点的指针。

p为单支结点

         若p为单支结点(即只有左子树或右子树),则将p的子树与p的父亲结点相连,删除p即可。

p的左子树和右子树均不空

         这里要先解释两个概念:

                   P的直接后继:P的右孩子的最左子孙,如:上面图中5的直接后继就是6。

                   P的直接前驱:P的左海子的最右子孙,如:上面图中5的直接前驱就是3。

         删除过程:

                   1,将p的直接后继的值拷贝到p处

                   2,删除p的直接后继

                   PS:将上面两步的“直接后继”替换为“直接前驱”也行。

修改二叉树的某个节点

         如把上面图中的节点10改成14,最简单的做法是把节点10删掉,然后插入14。

 

 

0 0
原创粉丝点击