我正在研究treap数据结构。插入节点时,treap radomly生成节点的优先级。但是,如果上图中69节点生成的优先级为13,该怎么办?
父母的优先级必须高于孩子的优先级。 treap的二叉树属性是否与堆属性冲突?
我想知道。感谢。
答案 0 :(得分:1)
如果节点69具有优先级13,则它将是树的根,并且节点31将是其左子节点。节点31的后代将如图所示,当然除了节点69之外。
总是可以安排一个treap,以便它既可以考虑堆也可以考虑二进制搜索属性。事实上,在没有相同价值观或同等优先权的情况下,只有一种可能的安排。
优先级的随机分配使得treap可能会合理平衡。它可能不是完美平衡的,但从积极的一面来看,建立这种快感并不复杂。
答案 1 :(得分:1)
假设你没有69节点从你的图片中删除并想要添加(69,13)节点:
1. 拆分现有的treap到按键69的L和R(此处所有旧的treap将为L)
2. 创建使用单个节点(69,13)进行三重扫描
3. 合并 M与L,然后与R
结果
对于这种情况,节点(69,13)成为新的根,旧的treap将是它的左子。