Python 中从叶子开始的最小字符串
pythonserver side programmingprogramming更新于 2025/11/14 14:36:17
假设我们有一个二叉树的根,每个节点包含一个从 0 到 25 的值,分别代表字母"a"到"z":0 值代表"a",1 值代表"b",依此类推。我们必须搜索从这棵树的叶子开始到根结束的字典顺序最小的字符串。因此,如果树像 −

则输出将是 “adz”因为序列是 [0,3,25]
为了解决这个问题,我们将遵循以下步骤 −
定义一个 dfs 遍历方法如下
如果节点不为空,则
将节点值作为字符插入 A
如果节点没有左子节点和右子节点,则
ans := ans 和 A 元素的最小值作为反转形式的字符串
从 A 中删除最后一个元素
返回
执行 dfs(节点左侧,A)
执行 dfs(节点右侧, A)
从 A 中删除最后一个元素
返回
实际方法如下 −
ans := “~”
call dfs(root, an empty array as A)
返回 ans
让我们看看下面的实现以便更好地理解 −
示例
class TreeNode:
def __init__(self, data, left = None, right = None):
self.data = data
self.left = left
self.right = right
def insert(temp,data):
que = []
que.append(temp)
while (len(que)):
temp = que[0]
que.pop(0)
if (not temp.left):
if data is not None:
temp.left = TreeNode(data)
else:
temp.left = TreeNode(0)
break
else:
que.append(temp.left)
if (not temp.right):
if data is not None:
temp.right = TreeNode(data)
else:
temp.right = TreeNode(0)
break
else:
que.append(temp.right)
def make_tree(elements):
Tree = TreeNode(elements[0])
for element in elements[1:]:
insert(Tree, element)
return Tree
class Solution(object):
def smallestFromLeaf(self, root):
self.ans = "~"
self.dfs(root,[])
return self.ans
def dfs(self, node, A):
if node:
A.append(chr(node.data + ord('a')))
if not node.left and not node.right:
self.ans = min(self.ans, ''.join(reversed(A)))
A.pop()
return
self.dfs(node.left,A)
self.dfs(node.right,A)
A.pop()
return
root = make_tree([25,1,3,1,3,0,2])
ob = Solution()
print(ob.smallestFromLeaf(root))
输入
[25,1,3,1,3,0,2]
输出
adz
相关文章
有用资源
python 参考教程 - 该教程包含有关 python 的更多信息:https://www.cainiaomax.com/python/

