Skip to content

Instantly share code, notes, and snippets.

@shrmnk
Last active December 6, 2017 03:31
Show Gist options
  • Save shrmnk/f597f11c21b024609abf4d07b9058912 to your computer and use it in GitHub Desktop.
Save shrmnk/f597f11c21b024609abf4d07b9058912 to your computer and use it in GitHub Desktop.
IS103 CT AY1213 Q3 Binary Tree Checker
############################################################
# AY1213 Term 2 Finals #
# Q3 Binary Tree solution checker #
# NOTE: This is a best-effort simple solution checker #
# and put together in probably the most inefficient #
# way. Sorry Prof Hady & Mok! #
############################################################
# Updated 6 Dec 17, 1115 #
# Feel free to comment/fork #
############################################################
# Write your 2 methods here, then run `ruby q3_checker.rb`
def CountTwoChildren(t)
end
def CountDescendents(t)
end
## DO NOT TOUCH ANYTHING BELOW THIS LINE UNLESS YOU KNOW WHAT YOU ARE DOING ##
COUNT_TWO_CHILDREN_EXPECTED = 4.freeze
COUNT_DESCENDENTS_EXPECTED = [9,3,1,0,0,4,0,2,0,0].freeze
class Node
attr_accessor :leftChild, :rightChild, :descendents, :key
def initialize(key)
@leftChild = nil
@rightChild = nil
# Assume t.descendents is always initialised with 0
@descendents = 0
@key = key
end
end
@descendents = []
# preorder grants us a sequential (1..10) traversal of the example tree
def traverseTreeDescendents(t)
return if t.nil?
@descendents << t.descendents
traverseTreeDescendents(t.leftChild) unless t.leftChild.nil?
traverseTreeDescendents(t.rightChild) unless t.rightChild.nil?
end
# Create Binary Tree based on Q3 Figure 2
puts 'Creating example Binary Tree...'
root_node = Node.new(1)
root_node.leftChild = Node.new(2)
root_node.leftChild.leftChild = Node.new(3)
root_node.leftChild.leftChild.leftChild = Node.new(4)
root_node.leftChild.rightChild = Node.new(5)
root_node.rightChild = Node.new(6)
root_node.rightChild.leftChild = Node.new(7)
root_node.rightChild.rightChild = Node.new(8)
root_node.rightChild.rightChild.leftChild = Node.new(9)
root_node.rightChild.rightChild.rightChild = Node.new(10)
puts 'Tree Created'
puts ''
puts 'Calling CountTwoChildren...'
puts "Expected Answer: #{COUNT_TWO_CHILDREN_EXPECTED}"
count = CountTwoChildren(root_node)
puts "Your answer: #{count}"
puts count == COUNT_TWO_CHILDREN_EXPECTED ? '=> Correct!' : '=> WRONG ANSWER!'
puts ''
puts 'Calling CountDescendents...'
puts "Expected Answer: #{COUNT_DESCENDENTS_EXPECTED}"
CountDescendents(root_node)
traverseTreeDescendents(root_node)
puts "Your answer: #{@descendents}"
puts @descendents == COUNT_DESCENDENTS_EXPECTED ? '=> Correct!' : '=> WRONG ANSWER!'
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment