Last active
December 6, 2017 03:31
-
-
Save shrmnk/f597f11c21b024609abf4d07b9058912 to your computer and use it in GitHub Desktop.
IS103 CT AY1213 Q3 Binary Tree Checker
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
############################################################ | |
# 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