class TreeNode:
def __init__(self, x):
self.val = x
self.left = None
self.right = None
class Solution:
"""
思路:
第一个问题:深度优先搜索,从根节点到每一个叶子节点分别是一个路径,也就是对应到题目中的字符串
使用的是先序遍历的思路
第二个问题:字符串的比较问题(本题目中的0-25)其实没什么作用,只是代表着a-z的字母,
"""
def __init__(self):
# 定义一个类内的list 用来存储中间结果
self.l = []
def smallestFromLeaf(self, root: TreeNode) -> str:
if root is None:
return ""
# sb 为stringbuilder的缩写
sb = ""
self.dfs(root, sb)
return self.l[0] if self.l else ""
def dfs(self, root, sb):
# 将数字转化成字母,一进入函数立马构建字符串, 不管root是不是None(因为我能保证它不可能是None)
sb += chr(root.val + 97)
# 到达叶子节点
if root.left is None and root.right is None:
# 字符串翻转(题目要求是从叶子节点到跟节点)
# 字符串翻转比较简单的方法是 tmp_sb = sb[::-1], 但是有的书说这样写很不专业
tmp_sb = "".join(list(sb).reverse())
# 字符串比较逻辑
if len(self.l) != 0:
if tmp_sb < self.l[0]:
self.l.clear()
self.l.append(tmp_sb)
else:
self.l.append(tmp_sb)
return
# 递归左子树和右子树
if root.left:
self.dfs(root.left, sb)
if root.right:
self.dfs(root.right, sb)
leetcode988. 从叶结点开始的最小字符串
猜你喜欢
转载自blog.csdn.net/weixin_36149892/article/details/103543116
今日推荐
周排行