Advertisement
Guest User

Untitled

a guest
Dec 4th, 2016
62
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.52 KB | None | 0 0
  1. def traversal(T, parent, parents, leafs):
  2.     if T:
  3.         parents[T] = parent
  4.         traversal(T.left, T, parents, leafs)
  5.         traversal(T.right, T, parents, leafs)
  6.     else:
  7.         if parent not in leafs:
  8.             leafs.append(parent)
  9.  
  10.  
  11. def backtrack(node, path, A, B, parents):
  12.     if node and (node.x in range(A, B + 1)):
  13.         path.append(node)
  14.         backtrack(parents[node], path, A, B, parents)
  15.  
  16.  
  17. def valid(T, parent, A, B, valids):
  18.     if T:
  19.         valid(T.left, T, A, B, valids)
  20.     else:
  21.         valids.append(parent.x in range(A, B + 1))
  22.  
  23.  
  24. def traversal2(T, path, A, B):
  25.     if T:
  26.         valids = []
  27.         valid(T, None, A, B, valids)
  28.  
  29.         if True in valids:
  30.             path.append(T)
  31.         traversal2(T.left, path, A, B)
  32.         traversal2(T.right, path, A, B)
  33.  
  34.  
  35. def merge(subtrees_roots, A, B):
  36.     result = []
  37.  
  38.     for root in set(subtrees_roots):
  39.         path = []
  40.         traversal2(root, path, A, B)
  41.         result.append(path)
  42.  
  43.     return result
  44.  
  45.  
  46. def max_sub_tree(T, A, B):
  47.     parents = { }
  48.     leafs = []
  49.     subtrees_roots = []
  50.  
  51.     traversal(T, None, parents, leafs)
  52.  
  53.     for leaf in leafs:
  54.         path = []
  55.         backtrack(leaf, path, A, B, parents)
  56.        
  57.         if path:
  58.             subtrees_roots.append(path[-1])
  59.  
  60.     subtrees = merge(subtrees_roots, A, B)
  61.  
  62.     max_subtree_len = -1
  63.  
  64.     for subtree in subtrees:
  65.         if len(subtree) > max_subtree_len:
  66.             max_subtree_len = len(subtree)
  67.  
  68.     return max_subtree_len
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement