给出Treap的完整代码

Treap 是一种随机化的二叉搜索树数据结构,它结合了二叉搜索树的有序性和堆的随机性。其中,每个节点都有一个优先级(priority),并保证了在树中任意两个节点的优先级都是独立随机生成的。

以下是 Treap 的完整代码(使用 C++ 语言):

```cpp #include <bits/stdc++.h> using namespace std;

struct Node { int key, priority; Node *left, *right; Node(int key, int priority) : key(key), priority(priority), left(NULL), right(NULL) {} };

class Treap { Node *root;

void rotateRight(Node *&p) { Node *q = p->left; p->left = q->right; q->right = p; p = q; }

void rotateLeft(Node *&p) { Node *q = p->right; p->right = q->left; q->left = p; p = q; }

void insertUtil(Node *&p, int key, int priority) { if (!p) { p = new Node(key, priority); return; }

if (key < p->key) {
  insertUtil(p->left, key, priority);
  if (p->left->priority > p->priority) {
    rotateRight(p);
  }
} else {
  insertUtil(p->right, key, priority);
  if (p->right->priority > p->priority) {
    rotateLeft(p);
  }
}

}

void deleteUtil(Node *&p, int key) { if (!p) { return; }

if (p->key == key) {
  if (!p->left &amp;&amp; !p->right) {
    delete p;
    p = NULL;
  } else if (!p->left) {
    Node *q = p;
    p = p->right;
    delete q;
  } else if (!p->right) {
    Node *q = p;
    p = p->left;
    delete q;
  } else {
    if (p->left->priority > p->right->priority) {
      rotateRight(p);
      deleteUtil(p->right, key);
    } else {
      rotateLeft(p);
      deleteUtil(p->left, key);
    }
  }
} else if (p->key > key
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值