thiagowfx's avatar

Β¬ just serendipity πŸ€ (not just serendipity)

LeetCode #257: Binary Tree Paths

β€’ 118 words β€’ 1 min β€’ updated

LeetCode #257: Binary Tree Paths:

python
# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
class Solution:
    def binaryTreePaths(self, root: Optional[TreeNode]) -> List[str]:
        ans = []

        def backtrack(node, path: list):
            if not node:
                return

            if not node.left and not node.right:
                path.append(node.val)
                ans.append('->'.join(str(val) for val in path))
                path.pop()
                return

            if node.left:
                path.append(node.val)
                backtrack(node.left, path)
                path.pop()

            if node.right:
                path.append(node.val)
                backtrack(node.right, path)
                path.pop()

        backtrack(root, [])

        return ans

One pitfall, this fails:

python
if node.left:
        path.append(node.val)
        backtrack(node.left, path.copy().append(node.val))  # or path[:]
        path.pop()

Whereas this doesn’t:

python
if node.left:
    path.append(node.val)
    backtrack(node.left, path)
    path.pop()

Why? Because list.append() modifies the list in place and returns None.