Skip to content

algorithm: Iterative (and in-place) BFS for binary trees #1102

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

Merged
merged 7 commits into from
Sep 22, 2022

Conversation

kho-kho-kho
Copy link
Contributor

Wrote a similar version of this to help visualize some of the testing I had done recently with the AVLTree.

It's helpful for folks to know that recursion isn't the end-all-be-all solution for tree-based problems. Recursive solutions are great for academia, but depending on the type of commercial development they'll be doing recursion may not always be an acceptable option.

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 its comments that points to Wikipedia or other similar explanation.
  • If this pull request resolves one or more open issues then the commit message contains Fixes: #{$ISSUE_NO}.

The original insertBalance function was doing raw value comparisons as opposed to using the tree's comparator. This is clearly unintentional, and would (ultimately) cause the structure to segfault when constructed with the stringData included in the updated test.

I've added the fix, scanned the rest of the code for similar issues, and added the appropriate test case which passes successfully with the fix. The jest code coverage increases slightly as well with the changes.
Added a couple of extra elements to the original test tree, and then removed elements in an order such that all previously uncovered branches of code are now covered.

Also added an emptyTree structure to test some additional (trivial) base cases.
missed this from my previous commit
An iterative analog to the traditional recursive breadth-first-search algorithm for binary trees.

This in-place solution uses the pre-existing "traversal" array for both tracking the algorithm as well as storing the result.

Also tweaked old code by resetting the traversal array each time the tree is traversed (otherwise you're only allowed to traverse a tree once which doesn't seem correct even with a single traversal function).
@appgurueu appgurueu added the algorithm Adds or improves an algorithm label Sep 17, 2022
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.

The algorithm is fine but inherits some poor code quality.

got rid of unnecessary currentSize
added currentNode for clarity
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.

Looks good, can be iterated upon as you said.

@raklaptudirm
Copy link
Member

@appgurueu All the conversations are resolved I suppose?

@appgurueu
Copy link
Collaborator

@appgurueu All the conversations are resolved I suppose?

Yes. It's minor enough to be postponed.

@kho-kho-kho
Copy link
Contributor Author

@appgurueu All the conversations are resolved I suppose?

Yes. It's minor enough to be postponed.

@appgurueu Appreciate the review!

@raklaptudirm Good to merge now?

@raklaptudirm raklaptudirm changed the title Iterative (and in-place) BFS for binary trees algorithm: Iterative (and in-place) BFS for binary trees Sep 22, 2022
@raklaptudirm raklaptudirm merged commit 7ab9792 into TheAlgorithms:master Sep 22, 2022
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
algorithm Adds or improves an algorithm
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants