Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
121 changes: 103 additions & 18 deletions lib/tree.rb
Original file line number Diff line number Diff line change
Expand Up @@ -16,40 +16,125 @@ def initialize
@root = nil
end

# Time Complexity:
# Space Complexity:
# Time Complexity: O(log n)
# Space Complexity: O(log n)
def add_helper(current_node, key, value)
if current_node.nil?
return TreeNode.new(key, value)
end

if key < current_node.key
current_node.left = add_helper(current_node.left, key, value)
else
current_node.right = add_helper(current_node.right, key, value)
end

return current_node
end

def add(key, value)
raise NotImplementedError
@root = add_helper(@root, key, value)
end

# Time Complexity: O(logn)
# Space Complexity: O(logn)
def find_helper(current_node, target)
if current_node == nil
return current_node
end

if current_node.key == target
return current_node.value
end

if target < current_node.key
find_helper(current_node.left, target)
else
find_helper(current_node.right, target)
end
end

# Time Complexity:
# Space Complexity:
def find(key)
raise NotImplementedError
return find_helper(@root, key)
end

# Time Complexity: O(n)
# Space Complexity: O(n)
def inorder_helper(current_node, list)
if current_node.nil?
return list
end

inorder_helper(current_node.left, list)
list << {key: current_node.key, value: current_node.value}
inorder_helper(current_node.right, list)

return list
end

# Time Complexity:
# Space Complexity:
def inorder
raise NotImplementedError
return inorder_helper(@root, [])
end

# Time Complexity: O(n)
# Space Complexity: O(n)
def preorder_helper(current_node, list)
if current_node.nil?
return list
end

list << {key: current_node.key, value: current_node.value}
preorder_helper(current_node.left, list)
preorder_helper(current_node.right, list)

return list
end

# Time Complexity:
# Space Complexity:
def preorder
raise NotImplementedError
return preorder_helper(@root, [])
end

# Time Complexity:
# Space Complexity:
# Time Complexity: O(n)
# Space Complexity: O(n)
def postorder_helper(current_node, list)
if current_node.nil?
return list
end

postorder_helper(current_node.left, list)
postorder_helper(current_node.right, list)
list << {key: current_node.key, value: current_node.value}

return list
end

def postorder
raise NotImplementedError
return postorder_helper(@root, [])
end

# Time Complexity: O(n)
# Space Complexity: O(n)
def height_helper(current_node)
if current_node.nil?
return 0
end

left = height_helper(current_node.left)
right = height_helper(current_node.right)

if left > right
return left += 1
else
return right += 1
end
end

# Time Complexity:
# Space Complexity:
def height
raise NotImplementedError
if @root.nil?
return 0
end

return height_helper(@root)
end

# Optional Method
Expand Down