Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
- Notifications
You must be signed in to change notification settings - Fork 51k
Symmetric tree#9871
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
Uh oh!
There was an error while loading. Please reload this page.
Symmetric tree #9871
Changes from all commits
9c90ab7632b1d3f6b261efa4225490d8c41f7ea89c6cd56287c8afa64d16aebe305ae31e73db31964155621959d1aec62844d843a0b4c1f24dafe7e222cd70662fa97cf24dcef98f1991229d858542cff6bfe7c76d539199bd84a91d43d8cef0bbab4fa076962b4a80File filter
Filter by extension
Conversations
Uh oh!
There was an error while loading. Please reload this page.
Jump to
Uh oh!
There was an error while loading. Please reload this page.
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,101 @@ | ||
| """ | ||
| Given the root of a binary tree, check whether it is a mirror of itself | ||
| (i.e., symmetric around its center). | ||
| Leetcode reference: https://leetcode.com/problems/symmetric-tree/ | ||
| """ | ||
| from __future__ import annotations | ||
| from dataclasses import dataclass | ||
| @dataclass | ||
| class Node: | ||
| """ | ||
| A Node has data variable and pointers to Nodes to its left and right. | ||
| """ | ||
| data: int | ||
| left: Node | None = None | ||
| right: Node | None = None | ||
| def make_symmetric_tree() -> Node: | ||
cclauss marked this conversation as resolved.
Uh oh!There was an error while loading. Please reload this page. cclauss marked this conversation as resolved.
Uh oh!There was an error while loading. Please reload this page. | ||
| r""" | ||
| Create a symmetric tree for testing. | ||
| The tree looks like this: | ||
| 1 | ||
| / \ | ||
| 2 2 | ||
| / \ / \ | ||
| 3 4 4 3 | ||
| """ | ||
| root = Node(1) | ||
| root.left = Node(2) | ||
| root.right = Node(2) | ||
| root.left.left = Node(3) | ||
| root.left.right = Node(4) | ||
| root.right.left = Node(4) | ||
| root.right.right = Node(3) | ||
| return root | ||
| def make_asymmetric_tree() -> Node: | ||
cclauss marked this conversation as resolved.
Uh oh!There was an error while loading. Please reload this page. cclauss marked this conversation as resolved.
Uh oh!There was an error while loading. Please reload this page. cclauss marked this conversation as resolved.
Uh oh!There was an error while loading. Please reload this page. | ||
| r""" | ||
| Create a asymmetric tree for testing. | ||
| The tree looks like this: | ||
| 1 | ||
| / \ | ||
| 2 2 | ||
| / \ / \ | ||
| 3 4 3 4 | ||
| """ | ||
| root = Node(1) | ||
| root.left = Node(2) | ||
| root.right = Node(2) | ||
| root.left.left = Node(3) | ||
| root.left.right = Node(4) | ||
| root.right.left = Node(3) | ||
| root.right.right = Node(4) | ||
| return root | ||
| def is_symmetric_tree(tree: Node) -> bool: | ||
| """ | ||
| Test cases for is_symmetric_tree function | ||
| >>> is_symmetric_tree(make_symmetric_tree()) | ||
| True | ||
| >>> is_symmetric_tree(make_asymmetric_tree()) | ||
| False | ||
| """ | ||
| if tree: | ||
| return is_mirror(tree.left, tree.right) | ||
| return True # An empty tree is considered symmetric. | ||
| def is_mirror(left: Node | None, right: Node | None) -> bool: | ||
| """ | ||
| >>> tree1 = make_symmetric_tree() | ||
| >>> tree1.right.right = Node(3) | ||
| >>> is_mirror(tree1.left, tree1.right) | ||
| True | ||
| >>> tree2 = make_asymmetric_tree() | ||
| >>> is_mirror(tree2.left, tree2.right) | ||
| False | ||
| """ | ||
| if left is None and right is None: | ||
| # Both sides are empty, which is symmetric. | ||
| return True | ||
| if left is None or right is None: | ||
| # One side is empty while the other is not, which is not symmetric. | ||
| return False | ||
| if left.data == right.data: | ||
| # The values match, so check the subtree | ||
| return is_mirror(left.left, right.right) and is_mirror(left.right, right.left) | ||
| return False | ||
| if __name__ == "__main__": | ||
| from doctest import testmod | ||
| testmod() | ||
Uh oh!
There was an error while loading. Please reload this page.