Problem of The Day: Construct String from Binary Tree
Problem Statement
Intuition
When looking at the problem, my initial thought is to traverse the binary tree using depth-first search (DFS). During traversal, we can construct the string representation of the tree by recursively concatenating node values along with parentheses to represent the structure.
Approach
I’ll implement a depth-first search function (dfs
) that takes a node as input. Within this function, I’ll handle the base cases where the node is empty or if it’s a leaf node (having no children). For non-empty nodes with children, I’ll recursively traverse the left and right subtrees, constructing the string representation accordingly.
Complexity
-
Time complexity: Since each node is visited once, the time complexity is O(n), where n is the number of nodes in the binary tree.
-
Space complexity: The space complexity is also O(n) due to the recursive nature of the depth-first search function.
Code
# 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 tree2str(self, root: Optional[TreeNode]) -> str:
def dfs(node):
if not node:
return ""
if not node.left and not node.right:
return str(node.val)
res = str(node.val)
L = '(' + dfs(node.left) + ')'
R = '(' + dfs(node.right) + ')'
res += L
res += R if R != '()' else ""
return res
return dfs(root)