Skip to content
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

feat: add preOrder algorithm for tree data structure. test: add testc… #1323

Open
wants to merge 1 commit into
base: master
Choose a base branch
from

Conversation

Aryadev19
Copy link

…ases for preOrder algortihm

Open in Gitpod know more

Describe your change:

  • Add an algorithm?
  • Fix a bug or typo in an existing algorithm?
  • Documentation change?

Checklist:

  • I have read CONTRIBUTING.md.
  • This pull request is all my own work -- I have not plagiarized.
  • I know that pull requests will not be merged if they fail the automated tests.
  • This PR only changes one algorithm file. To ease review, please open separate PRs for separate algorithms.
  • All new JavaScript files are placed inside an existing directory.
  • All filenames should use the UpperCamelCase (PascalCase) style. There should be no spaces in filenames.
    Example:UserProfile.js is allowed but userprofile.js,Userprofile.js,user-Profile.js,userProfile.js are not
  • All new algorithms have a URL in their comments that points to Wikipedia or another similar explanation.
  • If this pull request resolves one or more open issues then the commit message contains Fixes: #{$ISSUE_NO}.

Copy link
Collaborator

@appgurueu appgurueu left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Implementation looks fine, apart from the fact that it has quadratic time complexity due to the constant array copying. Either fix this or add a big fat warning; I'd expect a pre-order traversal to have linear time complexity. Ideally you would use a generator instead of pushing to a list IMO.

The tests seem somewhat excessive for such a simple function (my rule of thumb roughly is 1:1 implementation to tests, 1:2 or 1:3 at most). You could also greatly shorten the tests by writing a utility constructor - something like const T = (left, value, right) => {left: left, value: value, right: right}.

I also think we should start consolidating (binary) tree algorithms in a (binary= tree class. A class would be a good idea to document the expected tree format and to group together related binary tree algorithms, including postorder and inorder traversal.

Finally, this is missing a doc comment; generally that would be fine for such a simple function ("self-documenting"), but I think that at least the tree format should be documented here.

@Aryadev19
Copy link
Author

You are probably right, implementing all the methods in a tree class will be better. I am totally new to contributing to open source, so I am still learning about good test cases, I have one doubt one method is missing from the tree that is tree mirroring, I was thinking about doing that, so should it be a separate algorithm like in the python one or should I just update the tree file.

@appgurueu
Copy link
Collaborator

You should group algorithms working on the same tree structure in the same tree class. I assume you're going to implement a BinaryTree class?

@Aryadev19
Copy link
Author

Yeah I think there's only a BST class, not binary tree, so I can implement binary tree and implement some of the methods, I'll work on that then!

@stale
Copy link

stale bot commented Jun 18, 2023

This issue 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 contributions.

@stale stale bot added the stale Closed due to age label Jun 18, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
stale Closed due to age
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants