数据结构之查找(四)查询树的实现递归和非递归

一、查询树

              插入删除看这两篇关于inset和delete

              查询树的实现:http://xiaozhou09.iteye.com/blog/1958907

       平衡查询树的实现:http://xiaozhou09.iteye.com/blog/1961149

 

二、添加数据的实现

 

先说插入:

            我在查询树中的实现是一个非递归的过程

            =》每次得到要查询的父节点,判断条件就是要插入的位置子节点是个NULL

            =》然后比较,实例化,插入

 

---------------------------------------------------------------------------------------------------------

           平衡二叉树中要维护插入后路径的平衡因子,递归很好的处理这个问题。

           =》递归找到位置插入=》结束边界条件是到NULL

          =》重新得到平衡因子检查

          =》左边插入

                 =》当前值跟左孩子比较

                 =》LL LR

          =》右边插入

                =》当前值跟右孩子比较

                =》RR RL

 

 再说删除:

                在查询树中删除我是这样操作的

                =》得到删除的节点

                =》判断是否是叶子节点

                =》判断是否是只有左子树

                =》判断是否是只有右子树

                =》如果都有的话

                      =》可以找到左边最大的值代替然后删除这个节点

                      =》也可以找到右边最小的值代替然后杀出这个节点

----------------------------------------------------------------------------------------------------------

                 在平衡树种的删除参考的是网络中的处理方式

                 =》判断是否有右子树

                       =》没有把左子树赋值上去(可以包含了只有左子树和叶子节点)

                  =》右子树存在

                        =》找到最小的值给它赋值替换,然后删除(左右都有可以用,只有右子树也可以,叶子)

                =>删除完毕了然后回去重新判断下平衡因子

                 =》平衡因子只有可能+1 -1然后不平衡

                 =》平衡因子=2 =》必定+1=》删除了右边=》左边的值大了

                       =》判断左边是LL还是LR

                       =》此节点的左子树1,0 or -1

                 =》平衡因子=-2=》必定-1=》删除了左边=》右边值大了

                       =》判断右边是RR还是RL

                       =>=》此节点的右子树-1,0 or 1

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值