Skip to content
Open
Show file tree
Hide file tree
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
1 change: 1 addition & 0 deletions .tool-versions
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
ruby 2.7.2
69 changes: 45 additions & 24 deletions lib/tree.rb
Original file line number Diff line number Diff line change
Expand Up @@ -16,40 +16,61 @@ def initialize
@root = nil
end

# Time Complexity:
# Space Complexity:
def add(key, value)
raise NotImplementedError
# Time Complexity: O(log n) for a balanced tree, O(n) for an unbalanced tree
# Space Complexity: same as time complexity
def add(key, value = nil, current = @root)
return @root = TreeNode.new(key, value) if current.nil?
if key <= current.key
current.left ? add(key, value, current.left) : current.left = TreeNode.new(key, value)
else
current.right ? add(key, value, current.right) : current.right = TreeNode.new(key, value)
end
end

# Time Complexity:
# Space Complexity:
def find(key)
raise NotImplementedError
# Time Complexity: O(log n) for a balanced tree, O(n) for an unbalanced tree
# Space Complexity: same as time complexity
def find(key, current = @root)
return nil if current.nil?
return current.value if current.key == key
if key < current.key
find(key, current.left)
else key > current.key
find(key, current.right)
end
end

# Time Complexity:
# Space Complexity:
def inorder
raise NotImplementedError
# Time Complexity: 0(n) with n being number of nodes in the tree
# Space Complexity: O(n)
def inorder(current = @root, elements = [])
return elements if current.nil?
inorder(current.left, elements)
elements << {:key => current.key, :value => current.value}
inorder(current.right, elements)
end

# Time Complexity:
# Space Complexity:
def preorder
raise NotImplementedError
# Time Complexity: 0(n) with n being number of nodes in the tree
# Space Complexity: O(n)
def preorder(current = @root, elements = [])
return elements if current.nil?
elements << {:key => current.key, :value => current.value}
preorder(current.left, elements)
preorder(current.right, elements)
end

# Time Complexity:
# Space Complexity:
def postorder
raise NotImplementedError
# Time Complexity: 0(n) with n being number of nodes in the tree
# Space Complexity: O(n)
def postorder(current = @root, elements = [])
return elements if current.nil?
postorder(current.left, elements)
postorder(current.right, elements)
elements << {:key => current.key, :value => current.value}
end

# Time Complexity:
# Space Complexity:
def height
raise NotImplementedError
# Time Complexity: O(n)
# Space Complexity: O(n)
def height(current = @root)
return 0 if current.nil?
return 1 + [height(current.left), height(current.right)].max
end

# Optional Method
Expand Down
2 changes: 1 addition & 1 deletion test/tree_test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -69,7 +69,7 @@
end
end

describe "breadth first search" do
xdescribe "breadth first search" do
it "will give an empty array for an empty tree" do
expect(tree.bfs).must_equal []
end
Expand Down