数据结构之:treap 简介(二)

上一篇主要概述treap,并给出玩具版的代码。

这篇讲一讲treap树的插入、搜索、删除、旋转要考虑的问题。

先讲最需要注意的部分:结点旋转。

熟悉AVL树的会比较了解旋转,结点旋转是为了平衡树结构,使树更均匀。

那么treap树结点的旋转相对AVL简单,只有两种:左旋和右旋。

左旋就是:当根结点root的优先权低于root的右子结点时,需要将右子结点转到root位置,相应的root会变成新root的左子结点;

右旋同左旋类似。

图示:

插入:找到位置,插入叶子,查看新结点优先权与其父结点优先权大小关系,如果高,旋转至根结点;递归的进行如上操作。直至结点优先权低于其父结点为止。

删除:找到待删除结点,旋转至叶子结点。旋转方法为:取其优先权较高之孩子结点,将其旋转至父结点位置,这样父结点就下移,如此反复直到待删除结点没有任何孩子结点。然后删除。注意这里删除之后还要修改其父结点的子结点指针。

查找:跟BST一样。

全文完。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值