Advertisement
Guest User

binarytrees

a guest
Mar 23rd, 2015
296
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Nim 1.55 KB | None | 0 0
  1. import os, strutils
  2.  
  3. type
  4.   TreeNode[T] = object
  5.     item: T
  6.     left, right: TreeNodeRef[T]
  7.   TreeNodeRef[T] = ref TreeNode[T]
  8.  
  9. proc bottomUpTree(item, depth: int32): TreeNodeRef[int32] =
  10.     new(result)
  11.     if depth > 0:
  12.         var left, right: TreeNodeRef[int32]
  13.         new(left)
  14.         new(right)
  15.         left = bottomUpTree(2*item-1, depth-1)
  16.         right = bottomUpTree(2*item, depth-1)
  17.         result.item = item
  18.         result.left = left
  19.         result.right = right
  20.     else:
  21.         result.item = item
  22.  
  23. proc itemCheck(noderef: TreeNodeRef[int32]): int32 =
  24.   if noderef.left == nil:
  25.     result = noderef.item
  26.   else:
  27.     result = noderef.item + noderef.left.itemCheck - noderef.right.itemCheck
  28.  
  29. const minDepth = 4
  30.  
  31. let args = commandLineParams()
  32.  
  33. var n: int32 = 0
  34. if args.len > 0:
  35.   n = args[0].parseInt.toU32
  36.  
  37. let maxDepth: int32 = if minDepth + 2 > n: minDepth + 2
  38.                                      else: n
  39. let stretchDepth: int32 = maxDepth + 1
  40.  
  41. var check = bottomUpTree(0, stretchDepth).itemCheck
  42. echo "stretch tree of depth ", stretchDepth, "\t check: ", check
  43.  
  44. let longLivedTree = bottomUpTree(0, maxDepth)
  45.  
  46. for depth in countup(minDepth, maxDepth, 2):
  47.   let iterations = 1 shl (maxDepth - depth + minDepth)
  48.   check = 0
  49.  
  50.   for i in countup(1, iterations):
  51.     check += bottomUpTree(i, depth).itemCheck
  52.     check += bottomUpTree(-i, depth).itemCheck
  53.  
  54.   echo((iterations*2), "\t trees of depth ", depth, "\t check: ", check)
  55.  
  56. echo "long lived tree of depth ", maxDepth, "\t check: ", longLivedTree.itemCheck
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement