@@ -7,6 +7,7 @@ class Node(object):
77 Treap's node
88 Treap is a binary tree by value and heap by priority
99 """
10+
1011 def __init__ (self , value : int = None ):
1112 self .value = value
1213 self .prior = random ()
@@ -20,10 +21,7 @@ def __repr__(self):
2021 return "'%s: %.5s'" % (self .value , self .prior )
2122 else :
2223 return pformat (
23- {
24- "%s: %.5s"
25- % (self .value , self .prior ): (self .left , self .right )
26- },
24+ {"%s: %.5s" % (self .value , self .prior ): (self .left , self .right )},
2725 indent = 1 ,
2826 )
2927
@@ -33,6 +31,7 @@ def __str__(self):
3331 right = str (self .right or "" )
3432 return value + left + right
3533
34+
3635def split (root : Node , value : int ) -> Tuple [Node , Node ]:
3736 """
3837 We split current tree into 2 trees with value:
@@ -61,12 +60,13 @@ def split(root: Node, value: int) -> Tuple[Node, Node]:
6160 root .right , right = split (root .right , value )
6261 return (root , right )
6362
63+
6464def merge (left : Node , right : Node ) -> Node :
6565 """
6666 We merge 2 trees into one.
6767 Note: all left tree's values must be less than all right tree's
6868 """
69- if (not left ) or (not right ): # If one node is None, return the other
69+ if (not left ) or (not right ): # If one node is None, return the other
7070 return left or right
7171 elif left .prior < right .prior :
7272 """
@@ -82,6 +82,7 @@ def merge(left: Node, right: Node) -> Node:
8282 right .left = merge (left , right .left )
8383 return right
8484
85+
8586def insert (root : Node , value : int ) -> Node :
8687 """
8788 Insert element
@@ -94,6 +95,7 @@ def insert(root: Node, value: int) -> Node:
9495 left , right = split (root , value )
9596 return merge (merge (left , node ), right )
9697
98+
9799def erase (root : Node , value : int ) -> Node :
98100 """
99101 Erase element
@@ -102,15 +104,16 @@ def erase(root: Node, value: int) -> Node:
102104 Split all nodes with values greater into right.
103105 Merge left, right
104106 """
105- left , right = split (root , value - 1 )
107+ left , right = split (root , value - 1 )
106108 _ , right = split (right , value )
107109 return merge (left , right )
108110
111+
109112def inorder (root : Node ):
110113 """
111114 Just recursive print of a tree
112115 """
113- if not root : # None
116+ if not root : # None
114117 return
115118 else :
116119 inorder (root .left )
@@ -154,21 +157,26 @@ def interactTreap(root, args):
154157
155158 return root
156159
160+
157161def main ():
158162 """After each command, program prints treap"""
159163 root = None
160- print ("enter numbers to creat a tree, + value to add value into treap, - value to erase all nodes with value. 'q' to quit. " )
164+ print (
165+ "enter numbers to creat a tree, + value to add value into treap, - value to erase all nodes with value. 'q' to quit. "
166+ )
161167
162168 args = input ()
163- while args != 'q' :
169+ while args != "q" :
164170 root = interactTreap (root , args )
165171 print (root )
166172 args = input ()
167173
168174 print ("good by!" )
169175 pass
170176
177+
171178if __name__ == "__main__" :
172179 import doctest
180+
173181 doctest .testmod ()
174182 main ()
0 commit comments