一、查询树
插入删除看这两篇关于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