-
Notifications
You must be signed in to change notification settings - Fork 19.9k
Implement SplayTree #5142
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Implement SplayTree #5142
Conversation
Codecov ReportAttention: Patch coverage is
Additional details and impacted files@@ Coverage Diff @@
## master #5142 +/- ##
============================================
+ Coverage 50.97% 51.25% +0.28%
- Complexity 3159 3193 +34
============================================
Files 523 524 +1
Lines 15104 15194 +90
Branches 2874 2893 +19
============================================
+ Hits 7699 7788 +89
Misses 7084 7084
- Partials 321 322 +1 ☔ View full report in Codecov by Sentry. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
What do you think about introducing a method: List<Integer> traverse(TraverseOrder traverseOrder)
, where TraverseOrder
is an enum? This will allow to make the other methods private.
Does your implementation work for duplicated keys?
Please add the missing tests and please update your branch (there were some changes regarding the static analysis).
src/main/java/com/thealgorithms/datastructures/trees/SplayTree.java
Outdated
Show resolved
Hide resolved
src/main/java/com/thealgorithms/datastructures/trees/SplayTree.java
Outdated
Show resolved
Hide resolved
src/main/java/com/thealgorithms/datastructures/trees/SplayTree.java
Outdated
Show resolved
Hide resolved
src/main/java/com/thealgorithms/datastructures/trees/SplayTree.java
Outdated
Show resolved
Hide resolved
src/main/java/com/thealgorithms/datastructures/trees/SplayTree.java
Outdated
Show resolved
Hide resolved
src/main/java/com/thealgorithms/datastructures/trees/SplayTree.java
Outdated
Show resolved
Hide resolved
src/test/java/com/thealgorithms/datastructures/trees/SplayTreeTest.java
Outdated
Show resolved
Hide resolved
cbe94ae
to
626ef44
Compare
The current implementation of the Splay Tree does not handle duplicate keys explicitly. Here are a few possible approaches:
I think the simplest and most used approach is that when inserting a node with a duplicated key, we should update the existing node with the same key. What do you think about these approaches, we will choose the one to implement. |
I think we should not allow duplicate keys and explicitly throw an exception if one is trying to include already existing key. I looked at the existing implementations of BST in this repository and it is a total mess - each implementation reacts differently. |
I have updated the test cases, but there are a few partially covered lines. If you have any suggestion that make the code to be 100% covered, feel free to propose. |
cc5dc27
to
92a4b73
Compare
I have refactored the implementation to disallow inserting duplicated keys and to throw an error if this occurs. I also handle deletion on an empty tree and simplify the deletion process. |
92a4b73
to
37ce557
Compare
src/main/java/com/thealgorithms/datastructures/trees/SplayTree.java
Outdated
Show resolved
Hide resolved
src/main/java/com/thealgorithms/datastructures/trees/SplayTree.java
Outdated
Show resolved
Hide resolved
63179e3
to
3e1353f
Compare
src/main/java/com/thealgorithms/datastructures/trees/SplayTree.java
Outdated
Show resolved
Hide resolved
src/main/java/com/thealgorithms/datastructures/trees/SplayTree.java
Outdated
Show resolved
Hide resolved
src/main/java/com/thealgorithms/datastructures/trees/SplayTree.java
Outdated
Show resolved
Hide resolved
src/main/java/com/thealgorithms/datastructures/trees/SplayTree.java
Outdated
Show resolved
Hide resolved
src/main/java/com/thealgorithms/datastructures/trees/SplayTree.java
Outdated
Show resolved
Hide resolved
src/test/java/com/thealgorithms/datastructures/trees/SplayTreeTest.java
Outdated
Show resolved
Hide resolved
d6264d3
to
6b3816b
Compare
src/main/java/com/thealgorithms/datastructures/trees/SplayTree.java
Outdated
Show resolved
Hide resolved
850c378
to
fb62dab
Compare
7024614
to
0b18bab
Compare
Can you have a look at the PR @vil02. |
0b18bab
to
f956794
Compare
I have added a separate test for the uncovered line, I hope it covers that line. |
This pull request has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs. Thank you for your contribution! |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
src/main/java/com/thealgorithms/datastructures/trees/SplayTree.java
Outdated
Show resolved
Hide resolved
src/main/java/com/thealgorithms/datastructures/trees/SplayTree.java
Outdated
Show resolved
Hide resolved
src/main/java/com/thealgorithms/datastructures/trees/SplayTree.java
Outdated
Show resolved
Hide resolved
src/main/java/com/thealgorithms/datastructures/trees/SplayTree.java
Outdated
Show resolved
Hide resolved
src/main/java/com/thealgorithms/datastructures/trees/SplayTree.java
Outdated
Show resolved
Hide resolved
src/main/java/com/thealgorithms/datastructures/trees/SplayTree.java
Outdated
Show resolved
Hide resolved
src/main/java/com/thealgorithms/datastructures/trees/SplayTree.java
Outdated
Show resolved
Hide resolved
src/main/java/com/thealgorithms/datastructures/trees/SplayTree.java
Outdated
Show resolved
Hide resolved
src/main/java/com/thealgorithms/datastructures/trees/SplayTree.java
Outdated
Show resolved
Hide resolved
Can you have a look, @alxkm? |
@TruongNhanNguyen, everything looks good. However, the build is currently failing. You need to add a serialVersionUID field to the exception classes, similar to this:
Additionally, you haven't marked the key field as final in a few places. While it's optional, declaring it as final would indicate that the parameter is immutable and establish a constraint that can help prevent future modifications. |
- Add `final` to the `key` - Add `serialVersionUID` field to the exception classes
Let's have a look, @alxkm. I have updated the code based on the proposals and removed the redundant tests that are not necessary anymore (parametrized tests covered the lines that are covered by manual tests). Note that, the current tests do not fully cover the code, there is still 1 line partially covered. |
clang-format -i --style=file path/to/your/file.java