# 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 smallestFromLeaf(self, root: Optional[TreeNode]) -> str:
def dfs(root, cur):
if not root:
return
cur = chr(ord('a') + root.val) + cur
if root.left and root.right:
return min(
dfs(root.left, cur),
dfs(root.right, cur)
)
if root.right:
return dfs(root.right, cur)
if root.left:
return dfs(root.left, cur)
return cur
return dfs(root, "")# 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 smallestFromLeaf(self, root: Optional[TreeNode]) -> str:
q = deque([(root, "")])
res = None
while q:
node, cur = q.popleft()
cur = chr(ord('a') + node.val) + cur
if not node.left and not node.right:
res = min(res, cur) if res else cur
if node.left:
q.append((node.left, cur))
if node.right:
q.append((node.right, cur))
return res# 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 smallestFromLeaf(self, root: Optional[TreeNode]) -> str:
stack = [(root, "")]
res = None
while stack:
node, cur = stack.pop()
cur = chr(ord('a') + node.val) + cur
if not node.left and not node.right:
res = min(res, cur) if res else cur
if node.right:
stack.append((node.right, cur))
if node.left:
stack.append((node.left, cur))
return res