美文网首页
988. 从叶子结点开始的最小字符串(Python)

988. 从叶子结点开始的最小字符串(Python)

作者: 玖月晴 | 来源:发表于2021-05-08 11:23 被阅读0次

难度:★★★☆☆
类型:树
方法:深度优先搜索

题目

力扣链接请移步本题传送门
更多力扣中等题的解决方案请移步力扣中等题目录

给定一颗根结点为 root 的二叉树,树中的每一个结点都有一个从 0 到 25 的值,分别代表字母 'a' 到 'z':值 0 代表 'a',值 1 代表 'b',依此类推。

找出按字典序最小的字符串,该字符串从这棵树的一个叶结点开始,到根结点结束。

(小贴士:字符串中任何较短的前缀在字典序上都是较小的:例如,在字典序上 "ab" 比 "aba" 要小。叶结点是指没有子结点的结点。)

示例 1:

输入:[0,1,2,3,4,3,4]
输出:"dba"

示例 2:

输入:[25,1,3,1,3,0,2]
输出:"adz"

示例 3:

输入:[2,2,1,null,1,0,null,0]
输出:"abc"

提示:

给定树的结点数介于 1 和 8500 之间。
树中的每个结点都有一个介于 0 和 25 之间的值。

解答

我们可以通过深度优先搜索的方法探索每一条路径,选取并比较字典序最小的字符串作为结果返回。需要注意的是:

结果需要初始化为一个较大字典序的字符串;

深度优先搜索的递归函数的终止条件是检测到叶子节点;

使用一个列表用来保存当前路径下遍历到的各个结点。

class Solution:
    def smallestFromLeaf(self, root):
        self.ans = chr(ord("z") + 1)

        def val2chr(val):
            return chr(val + ord("a"))

        def dfs(node, arr):
            if node:
                arr.append(val2chr(node.val))
                if not node.left and not node.right:
                    self.ans = min(self.ans, "".join(reversed(arr)))

                dfs(node.left, arr)
                dfs(node.right, arr)
                arr.pop()

        dfs(root, [])
        return self.ans

如有疑问或建议,欢迎评论区留言~

有关更多力扣中等题的python解决方案,请移步力扣中等题解析

相关文章

  • 988. 从叶子结点开始的最小字符串(Python)

    难度:★★★☆☆类型:树方法:深度优先搜索 题目 力扣链接请移步本题传送门[https://leetcode-cn...

  • LeetCode #988 Smallest String St

    988 Smallest String Starting From Leaf 从叶结点开始的最小字符串 Descr...

  • 二叉树的最小深度

    求给定二叉树的最小深度。最小深度是指树的根结点到最近叶子结点的最短路径上结点的数量。

  • LeetCode 122周赛

    1. 题目列表 查询后的偶数和(简单模拟) 从叶结点开始的最小字符串(二叉树深搜 + 字符串比较) 区间列表的交集...

  • Huffman编码

    Huffman树: 路径带权 所有叶子结点的路经长*权的和—WPL,最小。 即权最大的叶子结点最浅 构造:从一堆带...

  • 4.4 哈夫曼树和哈夫曼编码

    1.带权路径长度(WPL): 设二叉树有n个叶子结点,每个叶子结点带有权值 wk,从根结点到每个叶子结点的长度为 ...

  • 数据结构笔记(树->哈夫曼树)

    带权路径长度(WPL):设二叉树有N个叶子结点,每个叶子结点带有权值Wk,从根节点到每个叶子结点的长度为lk,则每...

  • 2019中国大学生程序设计竞赛(CCPC) - 网络选拔赛 10

    考虑维护按照边权最小的堆,维护结点信息如下: 一开始,先将每个结点从最短的那条边扩展,然后对于每次操作。取队头元素...

  • python实现leetcode之111. 二叉树的最小深度

    解题思路 广度优先遍历在节点没有孩子节点的时候就是末梢,这时深度最小的叶子结点,直接返回 111. 二叉树的最小深...

  • 堆排序

    堆排序的思想(以最小堆为例): 给的无序数列,首先要将数组改造成符合最小堆关于最小堆的建造,从最后一个非叶结点开始...

网友评论

      本文标题:988. 从叶子结点开始的最小字符串(Python)

      本文链接:https://www.haomeiwen.com/subject/uaethltx.html