题目如下:
Given the
root
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
and1000
.- Each node in the tree will have a value between
0
and25
.
解题思路:把树遍历一下就好了,依次记录从根节点开始每一层的节点的值,到达叶子节点后比较得到最小值。
代码如下:
# Definition for a binary tree node. # class TreeNode(object): # def __init__(self, x): # self.val = x # self.left = None # self.right = None class Solution(object): res = 'z'*1001 def recursive(self,node,path): path += chr(node.val + ord('a')) if node.left == None and node.right == None: self.res = min(self.res,path[::-1]) if node.left != None: self.recursive(node.left,path) if node.right != None: self.recursive(node.right, path) def smallestFromLeaf(self, root): """ :type root: TreeNode :rtype: str """ if root != None: self.recursive(root,'') return self.res