摘要: 最近学习了这3种树,感觉其实有很多相同的地方吧,首先是最重要的旋转操作,3种树都有 AvlTree left_left(AvlTree k1) { //if(height(k1->left)-height(k1->right)<2)return k1; AvlTree k2 = k1->left; 阅读全文
posted @ 2016-11-18 22:22 朝阳独桥 阅读(843) 评论(1) 推荐(0) 编辑
摘要: 弄了很久,学习过程中觉得很难,但学完了,其实感觉也就那样,就是情况多了些。 首先是插入,插入的时候其实也就3种情况,因为只有当插入的节点的父亲是红色的时候,此时红黑树的性质遭到破坏,需要旋转,再分1.叔父节点为红,此时只要改变颜色,但祖父节点颜色的改变可能会破坏红黑树的性质,所以要node = gr 阅读全文
posted @ 2016-11-18 21:51 朝阳独桥 阅读(171) 评论(0) 推荐(0) 编辑
摘要: 伸展树,感觉对我这种菜鸟还是有些吃力,主要也是旋转的时候吧,把要查询的节点旋转到根节点,看网上是有两种方法,一是从上到下,一是从下到上。从上到下,是把树拆分成中树,左树和右树,始终保证目标节点在中树,不断向下把中树的节点添到右树或者左树,直到目标节点为中树的根,再将三树合并起来。另外一种从下到上,旋 阅读全文
posted @ 2016-10-25 23:13 朝阳独桥 阅读(120) 评论(0) 推荐(0) 编辑
摘要: 写了好久,感觉插入和删除麻烦些,插入也就4种情况,但只要写两个函数,左左和右右的,左右的情况是以根节点的左子树为头进行一次右右旋转,使它变成左左的情况,再左左旋转下就行了,右左的也一样; 另外就是删除,先是判断要删除的节点右儿子是否为空,是空,直接删,否则找到它右儿子的最左边的儿子来替代它,然后就是 阅读全文
posted @ 2016-10-17 19:29 朝阳独桥 阅读(940) 评论(0) 推荐(0) 编辑