我想通过向树中添加元素来构建一个随机搜索树。从链接中的伪代码工作:
// Insert a new node in the tree and return the updated tree.
Algorithm insert(node, tree)
if tree is empty
return node
if node.key < tree.key
tree.left ← insert(node, tree.left)
if tree.prio > tree.left.prio
rotate tree to the right
else
tree.right ← insert(node, tree.right)
if tree.prio > tree.right.prio
rotate tree to the left
return tree
我已经走到了这一步:
import random
class _Node:
def __init__(self,data):
self._left = None
self._right = None
self._key = data
self._prio = random.randint(1,2**64)
class BinaryTree:
def __init__(self):
self._root = None
self._size = 0
def add(self,key,prio):
node = _Node(key,prio)
self._root = self.insert(node,self._root)
def insert(self,node,tree):
if tree is None:
return node
if node._key < tree._key:
tree._left = self.insert(node,tree._left)
if tree._prio > tree._left._prio: # <<<<< Rotation part
tree._left._right = tree._left
if node._key > tree._key:
tree._right = self.insert(node,tree._right)
if tree._prio > tree._right._prio: #<<<<< Rotation part
tree._right._left = tree._right
return tree
看这个旋转:
/ /
G7 E3
/ \ --> \
E3 G7
\
我想分配 E3._right = G7。但是,我如何连接连接到 G7 的任何东西,即它是 E3 的父级?
任何帮助都非常感谢,我一直以这种方式坐了很久......