Smallest String Starting From Leaf
Given theroot
of a binary tree, each node has a value from0
to25
representing the letters'a'
to'z'
: a value of0
represents'a'
, a value of1
represents'b'
, and so on.
Find the lexicographically smallest string that starts at a leaf of this tree and ends at the root.
(As a reminder, any shorter prefix of a string is lexicographically smaller: for example,"ab"
is lexicographically smaller than"aba"
. A leaf of a node is a node that has no children.)
Example 1:

Input:
[0,1,2,3,4,3,4]
Output:
"dba"
Example 2:

Input:
[25,1,3,1,3,0,2]
Output:
"adz"
Example 3:

Input:
[2,2,1,null,1,0,null,0]
Output:
"abc"
Note:
The number of nodes in the given tree will be between 1 and 8500.
Each node in the tree will have a value between 0 and 25.
分析
The expected answer is "ababz", while by divide-and-conqure we would get "abz".
The problem here is
string X < string Y
doesn't guarantee
X + a < Y + a
where a is a character. e.g.:
"ab" < "abab", but "abz" > "ababz"
这里path就是后缀,没有左右子树了就可以更新res
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution:
def smallestFromLeaf(self, root: TreeNode) -> str:
if not root:
return ""
res = "~"
def dfs(root,surfix):
nonlocal res
if not root:
return
c = chr(root.val+97)+surfix
if not root.left and not root.right and c < res:
res = c
dfs(root.left, c)
dfs(root.right,c)
dfs(root,"")
return res
Last updated
Was this helpful?