Skip to content

Instantly share code, notes, and snippets.

@mankind
Created November 7, 2017 01:24
Show Gist options
  • Save mankind/1aec658abf8eb01b1eed437c55dc2af5 to your computer and use it in GitHub Desktop.
Save mankind/1aec658abf8eb01b1eed437c55dc2af5 to your computer and use it in GitHub Desktop.
Valid Binary Search Trees
module BinarySearchTree
class Node
include Comparable
attr_reader :value
attr_accessor :left, :right, :nodes_tracker
def initialize(value)
@value = value
self.nodes_tracker = []
end
def insert_node(node)
self.value <=> node.value
if node.value < self.value
self.left = node
self.nodes_tracker = node
elsif node.value > self.value
self.right = node
self.nodes_tracker = node
else
false
end
end
def node_checker
if (@tree.left.value < self.value ) && (@tree.right.value > self.value) && ( (@tree.left.left != nil) || (@tree.right.right != nil) )
puts "YES"
else
puts "N0"
end
end
def valid?(tree)
@tree = tree
return "NO" if (tree == nil)
return "NO" if (@tree.left == nil) && (@tree.right == nil)
if (@tree.left != nil ) && (@tree.right != nil)
node_checker
else
puts "N0"
end
end
def validate_tree?(root_tree)
if !root_tree.nodes_tracker.empty?
root_tree.nodes_tracker.each {|tree| tree.valid?(tree) }
else
root_tree.valid?(self)
end
end
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment