Skip to content

binary_tree_traversals.py: Simplify with dataclasses #4336

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

Conversation

cclauss
Copy link
Member

@cclauss cclauss commented Apr 17, 2021

Describe your change:

  • Add an algorithm?
  • Optimize 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 Python files are placed inside an existing directory.
  • All filenames are in all lowercase characters with no spaces or dashes.
  • All functions and variable names follow Python naming conventions.
  • All function parameters and return values are annotated with Python type hints.
  • All functions have doctests that pass the automated testing.
  • 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}.

@ghost ghost added enhancement This PR modified some existing files awaiting reviews This PR is ready to be reviewed labels Apr 17, 2021
Copy link
Member

@dhruvmanila dhruvmanila left a comment

Choose a reason for hiding this comment

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

Awesome work!

This is out of scope for this PR but just wanted to point out that I see a lot of Node classes containing a left and right node. I don't think that makes sense.

In case of tree structures a node can only contain key and data, key to identify the node and data is the containing information. The tree has left and right subtrees and not the node.

@ghost ghost added awaiting changes A maintainer has requested changes to this PR and removed awaiting reviews This PR is ready to be reviewed labels Apr 21, 2021
@ghost ghost added awaiting reviews This PR is ready to be reviewed and removed awaiting changes A maintainer has requested changes to this PR labels Apr 21, 2021
Comment on lines 8 to 9
left: "Node" = None
right: "Node" = None
Copy link
Member

Choose a reason for hiding this comment

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

I did not notice this the first time but shouldn't this be Optional["Node"]?

Copy link
Member Author

Choose a reason for hiding this comment

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

My sense was that if neither Python nor mypy was complaining about it then I would not either. This would be the only location where we would set these values to None unless we started deleting Nodes which I assumed we were not gonna do.

Copy link
Member

@dhruvmanila dhruvmanila Apr 21, 2021

Choose a reason for hiding this comment

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

Python is never going to complain as it simply does not care about type hints. mypy will complain when you run it in a bit stricter modes. Plain mypy will not complain about a lot of stuff as that's how gradual typing goes.

And no, as per this definition, the leaves of the trees (the last nodes) will have its left and right node None as there are no left and right child (we have reached the end).

Copy link
Member Author

@cclauss cclauss Apr 21, 2021

Choose a reason for hiding this comment

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

This would be the only location where we would set these values to None

Copy link
Member

Choose a reason for hiding this comment

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

Yes, but that still won't allow the file to be type checked later on. The variable's correct type is Optional["Node"]. Just because it is being set None once, does not change the type of that variable. That's what 'static' means in static typing :)

@ghost ghost removed the awaiting reviews This PR is ready to be reviewed label Apr 26, 2021
@dhruvmanila dhruvmanila merged commit 6945735 into master Apr 26, 2021
@dhruvmanila dhruvmanila deleted the binary_tree_traversals.py-Simplify-with-dataclasses branch April 26, 2021 04:45
Panquesito7 pushed a commit to Panquesito7/Python that referenced this pull request May 13, 2021
)

* binary_tree_traversals.py: Simplify with dataclasses

* Update data_structures/binary_tree/binary_tree_traversals.py

Co-authored-by: Dhruv Manilawala <[email protected]>

* Optional["Node"]

Co-authored-by: Dhruv Manilawala <[email protected]>
shermanhui pushed a commit to shermanhui/Python that referenced this pull request Oct 22, 2021
)

* binary_tree_traversals.py: Simplify with dataclasses

* Update data_structures/binary_tree/binary_tree_traversals.py

Co-authored-by: Dhruv Manilawala <[email protected]>

* Optional["Node"]

Co-authored-by: Dhruv Manilawala <[email protected]>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement This PR modified some existing files
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants