Advertisement
Guest User

Untitled

a guest
Jul 27th, 2016
65
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.15 KB | None | 0 0
  1. module BinaryTree
  2. class Node
  3. attr_reader :element
  4. attr_accessor :left, :right
  5.  
  6. def initialize(e=nil)
  7. @element = e
  8. end
  9.  
  10. def traverse
  11. @traversal = []
  12. traverse_node(self)
  13. @traversal
  14. end
  15.  
  16. def insert(e)
  17. insert_element(self, e)
  18. end
  19.  
  20. private
  21.  
  22. def traverse_node(node)
  23. return unless node
  24. traverse_node(node.left)
  25. @traversal << node.element
  26. traverse_node(node.right)
  27. end
  28.  
  29. def insert_element(node, e)
  30. (node.element = e and return) unless node.element
  31. n = node.element > e ? node.left : node.right
  32. n ? insert_element(node.left, e) : node.left = BinaryTree::Node.new(e)
  33. end
  34. end
  35. end
  36.  
  37. def input
  38. (1..1000).to_a.shuffle
  39. end
  40.  
  41. def tree
  42. input = input.shuffle
  43.  
  44. tree = BinaryTree::Node.new
  45.  
  46. input.each do |i|
  47. tree.insert(i)
  48. end
  49.  
  50. tree.traverse
  51. end
  52.  
  53. def test
  54. s = Time.now
  55. iterations = 20_000
  56. iterations.times { raise "Fail!" unless tree = input.sort }
  57. d = Time.now - s
  58. average = "%8f" % (d / iterations.to_f)
  59. puts "Binary tree has correctly ordered elements #{iterations} times in #{d} seconds. Average time per sort: #{average} seconds."
  60. end
  61.  
  62. test
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement