988 从叶子节点开始的最小字符串

题目:

给定一颗根结点为 root 的二叉树,树中的每一个结点都有一个 [0, 25] 范围内的值,分别代表字母 'a''z'

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

注**:**字符串中任何较短的前缀在 字典序上 都是 较小 的:

  • 例如,在字典序上 "ab""aba" 要小。叶结点是指没有子结点的结点。

节点的叶节点是没有子节点的节点。

解题思路

直接携带已有的字符进行深度优先遍历,将子节点的字符加载已有字符的头部。

到达叶子节点时,进行比较更新。

// date 2024/02/28
/**
 * Definition for a binary tree node.
 * type TreeNode struct {
 *     Val int
 *     Left *TreeNode
 *     Right *TreeNode
 * }
 */
func smallestFromLeaf(root *TreeNode) string {
	var ans string
	var dfs func(root *TreeNode, has string)
	dfs = func(root *TreeNode, has string) {
		if root == nil {
			return
		}
		has = string('a'+root.Val) + has
		if root.Left == nil && root.Right == nil {
			if ans == "" {
				ans = has
			} else if ans > has {
				ans = has
			}
			return
		}
		if root.Left != nil {
			dfs(root.Left, has)
		}
		if root.Right != nil {
			dfs(root.Right, has)
		}
	}

	dfs(root, "")

	return ans
}

最后更新于