class Node: Node *left Node *right key pri class Treap: Node *root # 以遞迴方式搜尋插入位置 insert(Node *t, key, pri): # 抵達沒有子節點 (即葉節點) 的位置時,產生並傳回新節點 if t = NULL: return Node(key, pri) # 傳回指標 # 忽略重複的鍵 if key = t.key: return t if key < t.key: # 往左子節點移動 # 將傳回的節點新增為左子節點 t.left ← insert(t.left, key, pri) # 若子節點的優先權較高,則以右旋轉將其往上提 if t.pri < t.left.pri: t ← rightRotate(t) else: # 往右子節點移動 # 將傳回的節點新增為右子節點 t.right ← insert(t.right, key, pri) # 若子節點的優先權較高,則以左旋轉將其往上提 if t.pri < t.right.pri: t ← leftRotate(t) return t # 以遞迴方式搜尋目標 erase(Node *t, key): if t = NULL: return NULL if key = t.key # t 為欲刪除的目標 if t.left = NULL and t.right = NULL: # t 為葉節點 : return NULL else if t.left = NULL: # t 只有 1 個右子節點 t ← leftRotate(t) else if t.right = NULL: # t 只有 1 個左子節點 t ← rightRotate(t) else: # t 有 2 個子節點 # 將優先權高的子節點往上提 if t.left.pri > t.right.pri t ← rightRotate(t) else: t ← leftRotate(t) return erase(t, key) # 以遞迴方式搜尋目標 if key < t.key: t.left ← erase(t.left, key) else: t.right ← erase(t.right, key) return t