Water@Hanh Solo - Tree practices#34
Conversation
CheezItMan
left a comment
There was a problem hiding this comment.
Thanks for getting this in Hanh. It's clear you found this project challenging. I left some comments, I hope you find helpful. Let me know what questions you have and I'm happy to work with you on this one.
lib/tree.rb
Outdated
| if key < current_node.key | ||
| current_node = current_node.left | ||
| else | ||
| current_node = current_node.right | ||
| end |
There was a problem hiding this comment.
What if key and current_node.key are equal?
lib/tree.rb
Outdated
| # Time Complexity: O(n) | ||
| # Space Complexity: O(1) | ||
| def inorder(current_node = @root, answer = []) | ||
| return [] if current_node.nil? |
There was a problem hiding this comment.
| return [] if current_node.nil? | |
| return answer if current_node.nil? |
lib/tree.rb
Outdated
| @root = new_node | ||
| else | ||
| current_node = @root | ||
| previouse_node = @root |
lib/tree.rb
Outdated
| # Space Complexity: O(1) | ||
| def find(key) | ||
| raise NotImplementedError | ||
| def find_helper(key, current_node) |
There was a problem hiding this comment.
Making an inner method like this in Ruby is discouraged and messy. It leads to tree.rb:54: warning: method redefined; discarding old find_helper
| new_node = TreeNode.new(key, value) | ||
|
|
||
| if @root == nil | ||
| @root = new_node | ||
| else | ||
| current_node = @root | ||
| previouse_node = @root | ||
|
|
||
| while current_node != nil | ||
| previouse_node = current_node | ||
| if key < current_node.key | ||
| current_node = current_node.left | ||
| else | ||
| current_node = current_node.right | ||
| end | ||
|
|
||
| if key < previouse_node.key | ||
| previouse_node.left = new_node | ||
| else | ||
| previouse_node.right = new_node | ||
| end | ||
| end | ||
|
|
||
| return new_node | ||
| end |
There was a problem hiding this comment.
| new_node = TreeNode.new(key, value) | |
| if @root == nil | |
| @root = new_node | |
| else | |
| current_node = @root | |
| previouse_node = @root | |
| while current_node != nil | |
| previouse_node = current_node | |
| if key < current_node.key | |
| current_node = current_node.left | |
| else | |
| current_node = current_node.right | |
| end | |
| if key < previouse_node.key | |
| previouse_node.left = new_node | |
| else | |
| previouse_node.right = new_node | |
| end | |
| end | |
| return new_node | |
| end | |
| new_node = TreeNode.new(key, value) | |
| if @root == nil | |
| @root = new_node | |
| else | |
| current_node = @root | |
| previous_node = @root | |
| until current_node.nil? | |
| previous_node = current_node | |
| if key < current_node.key | |
| current_node = current_node.left | |
| else | |
| current_node = current_node.right | |
| end | |
| end | |
| if key < previous_node.key | |
| previous_node.left = new_node | |
| else | |
| previous_node.right = new_node | |
| end | |
| return new_node | |
| end | |
| end |
lib/tree.rb
Outdated
| if current_node | ||
| inorder(current_node.left, answer) | ||
| answer.push({key: current_node.key, value: current_node.value}) | ||
| inorder(current_node.right) |
There was a problem hiding this comment.
| inorder(current_node.right) | |
| inorder(current_node.right, answer) |
lib/tree.rb
Outdated
| preorder(current_node.right, answer) | ||
| preorder(current_node.left) |
| # Time Complexity: O(n) | ||
| # Space Complexity: O(n) | ||
| def height(current_node = @root) |
There was a problem hiding this comment.
👍 However your space complexity is O(n) only if the tree is unbalanced and O(log n) if it is balanced.
No description provided.