|
| 1 | +from typing import Optional |
| 2 | + |
| 3 | +class TreeNode: |
| 4 | + def __init__(self, val=0, left=None, right=None): |
| 5 | + self.val = val |
| 6 | + self.left = left |
| 7 | + self.right = right |
| 8 | + |
| 9 | +class Solution: |
| 10 | + """ |
| 11 | + - Time Complexity: O(N), N = The number of nodes |
| 12 | + - Space complexity: O(H), H = The height of the tree |
| 13 | + """ |
| 14 | + def invertTree(self, root: Optional[TreeNode]) -> Optional[TreeNode]: |
| 15 | + if not root: |
| 16 | + return |
| 17 | + |
| 18 | + root.left, root.right = root.right, root.left |
| 19 | + |
| 20 | + self.invertTree(root.left) |
| 21 | + self.invertTree(root.right) |
| 22 | + |
| 23 | + return root |
| 24 | + |
| 25 | +def build_tree(values): |
| 26 | + from collections import deque |
| 27 | + if not values: |
| 28 | + return None |
| 29 | + root = TreeNode(values[0]) |
| 30 | + queue = deque([root]) |
| 31 | + i = 1 |
| 32 | + while i < len(values): |
| 33 | + node = queue.popleft() |
| 34 | + if values[i] is not None: |
| 35 | + node.left = TreeNode(values[i]) |
| 36 | + queue.append(node.left) |
| 37 | + i += 1 |
| 38 | + if i < len(values) and values[i] is not None: |
| 39 | + node.right = TreeNode(values[i]) |
| 40 | + queue.append(node.right) |
| 41 | + i += 1 |
| 42 | + return root |
| 43 | + |
| 44 | +def tree_to_list(root): |
| 45 | + from collections import deque |
| 46 | + if not root: |
| 47 | + return [] |
| 48 | + result = [] |
| 49 | + queue = deque([root]) |
| 50 | + while queue: |
| 51 | + node = queue.popleft() |
| 52 | + if node: |
| 53 | + result.append(node.val) |
| 54 | + queue.append(node.left) |
| 55 | + queue.append(node.right) |
| 56 | + else: |
| 57 | + result.append(None) |
| 58 | + # Remove trailing None |
| 59 | + while result and result[-1] is None: |
| 60 | + result.pop() |
| 61 | + return result |
| 62 | + |
| 63 | +tc = [ |
| 64 | + ([4,2,7,1,3,6,9], [4,7,2,9,6,3,1]), |
| 65 | + ([2,1,3], [2,3,1]), |
| 66 | + ([], []) |
| 67 | +] |
| 68 | + |
| 69 | +sol = Solution() |
| 70 | +for i, (n, e) in enumerate(tc, 1): |
| 71 | + r = tree_to_list(sol.invertTree(build_tree(n))) |
| 72 | + print(f"TC {i} is Passed!" if r == e else f"TC {i} is Failed! - Expected: {e}, Result: {r}") |
0 commit comments