返回介绍

solution / 0900-0999 / 0988.Smallest String Starting From Leaf / README

发布于 2024-06-17 01:03:32 字数 5054 浏览 0 评论 0 收藏 0

988. 从叶结点开始的最小字符串

English Version

题目描述

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

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

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

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

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

 

    示例 1:

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

    示例 2:

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

    示例 3:

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

     

    提示:

    • 给定树的结点数在 [1, 8500] 范围内
    • 0 <= Node.val <= 25

    解法

    方法一

    # Definition for a binary tree node.
    # class TreeNode:
    #   def __init__(self, val=0, left=None, right=None):
    #     self.val = val
    #     self.left = left
    #     self.right = right
    class Solution:
      def smallestFromLeaf(self, root: TreeNode) -> str:
        ans = chr(ord('z') + 1)
    
        def dfs(root, path):
          nonlocal ans
          if root:
            path.append(chr(ord('a') + root.val))
            if root.left is None and root.right is None:
              ans = min(ans, ''.join(reversed(path)))
            dfs(root.left, path)
            dfs(root.right, path)
            path.pop()
    
        dfs(root, [])
        return ans
    
    /**
     * Definition for a binary tree node.
     * public class TreeNode {
     *   int val;
     *   TreeNode left;
     *   TreeNode right;
     *   TreeNode() {}
     *   TreeNode(int val) { this.val = val; }
     *   TreeNode(int val, TreeNode left, TreeNode right) {
     *     this.val = val;
     *     this.left = left;
     *     this.right = right;
     *   }
     * }
     */
    class Solution {
      private StringBuilder path;
      private String ans;
    
      public String smallestFromLeaf(TreeNode root) {
        path = new StringBuilder();
        ans = String.valueOf((char) ('z' + 1));
        dfs(root, path);
        return ans;
      }
    
      private void dfs(TreeNode root, StringBuilder path) {
        if (root != null) {
          path.append((char) ('a' + root.val));
          if (root.left == null && root.right == null) {
            String t = path.reverse().toString();
            if (t.compareTo(ans) < 0) {
              ans = t;
            }
            path.reverse();
          }
          dfs(root.left, path);
          dfs(root.right, path);
          path.deleteCharAt(path.length() - 1);
        }
      }
    }
    
    /**
     * Definition for a binary tree node.
     * struct TreeNode {
     *   int val;
     *   TreeNode *left;
     *   TreeNode *right;
     *   TreeNode() : val(0), left(nullptr), right(nullptr) {}
     *   TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
     *   TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
     * };
     */
    class Solution {
    public:
      string ans = "";
    
      string smallestFromLeaf(TreeNode* root) {
        string path = "";
        dfs(root, path);
        return ans;
      }
    
      void dfs(TreeNode* root, string& path) {
        if (!root) return;
        path += 'a' + root->val;
        if (!root->left && !root->right) {
          string t = path;
          reverse(t.begin(), t.end());
          if (ans == "" || t < ans) ans = t;
        }
        dfs(root->left, path);
        dfs(root->right, path);
        path.pop_back();
      }
    };
    
    /**
     * Definition for a binary tree node.
     * type TreeNode struct {
     *   Val int
     *   Left *TreeNode
     *   Right *TreeNode
     * }
     */
    func smallestFromLeaf(root *TreeNode) string {
      ans := ""
      var dfs func(root *TreeNode, path string)
      dfs = func(root *TreeNode, path string) {
        if root == nil {
          return
        }
        path = string('a'+root.Val) + path
        if root.Left == nil && root.Right == nil {
          if ans == "" || path < ans {
            ans = path
          }
          return
        }
        dfs(root.Left, path)
        dfs(root.Right, path)
      }
    
      dfs(root, "")
      return ans
    }
    

    如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

    扫码二维码加入Web技术交流群

    发布评论

    需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
    列表为空,暂无数据
      我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
      原文