runnig

kth element in binary search tree

Jan 23rd, 2013
149
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.51 KB | None | 0 0
  1. # Find kth smallest element in a binary search tree
  2.  
  3. class Node(object):
  4.     def __init__(self, v, left = None, right = None):
  5.         self.v = v
  6.         self.left = left
  7.         self.right = right
  8.        
  9.     def __repr__(self):
  10.         fmt = "{%d" % self.v
  11.        
  12.         if self.left:
  13.             fmt += " L:%s" % str(self.left)
  14.            
  15.         if self.right:
  16.             fmt += " R:%s " % str(self.right)
  17.            
  18.         fmt += "}"
  19.        
  20.         return fmt
  21.        
  22. FOUND_NODE = 0
  23. NUM_CHILDREN = 1
  24. DOESNT_MATTER = -1
  25.  
  26. # returns a tuple of (found_node, num_children)
  27. # found_node = result
  28. # num_children = helper return value to support recursive algorithm
  29. def kth(root, k):
  30.     if not root:
  31.         return (None, 0)
  32.    
  33.     L = kth(root.left, k)
  34.    
  35.     if L[FOUND_NODE]:
  36.         return L
  37.    
  38.     if L[NUM_CHILDREN] == k: # num children on the left subtree
  39.         return (root, DOESNT_MATTER)
  40.        
  41.     R = kth(root.right, k - (1+L[NUM_CHILDREN]) )    
  42.     return (R[FOUND_NODE], 1 + R[NUM_CHILDREN] + L[NUM_CHILDREN])
  43.    
  44. def tree_from_sorted(seq, begin, end):
  45.    
  46.     N = end - begin
  47.     if N == 1:
  48.         return Node(seq[begin])
  49.        
  50.     pos = begin + N/2
  51.     return Node(seq[pos],
  52.         tree_from_sorted(seq, begin, pos),
  53.         tree_from_sorted(seq, pos+1, end))
  54.        
  55. N = 15        
  56. v = [i for i in range(N)]
  57. tree = tree_from_sorted(v, 0, len(v))
  58. print tree
  59.  
  60. for i in range(N):
  61.     node = kth(tree, i)[FOUND_NODE]
  62.     print i, node.v
Advertisement
Add Comment
Please, Sign In to add comment