Algorithm


Problem Name: 988. Smallest String Starting From Leaf

You are given the root of a binary tree where each node has a value in the range [0, 25] representing the letters 'a' to 'z'.

Return the lexicographically smallest string that starts at a leaf of this tree and ends at the root.

As a reminder, any shorter prefix of a string is lexicographically smaller.

  • For example, "ab" is lexicographically smaller than "aba".

A leaf of a node is a node that has no children.

 

Example 1:

Input: root = [0,1,2,3,4,3,4]
Output: "dba"

Example 2:

Input: root = [25,1,3,1,3,0,2]
Output: "adz"

Example 3:

Input: root = [2,2,1,null,1,0,null,0]
Output: "abc"

 

Constraints:

  • The number of nodes in the tree is in the range [1, 8500].
  • 0 <= Node.val <= 25

Code Examples

#1 Code Example with Java Programming

Code - Java Programming


class Solution {
  public String smallestFromLeaf(TreeNode root) {
    return dfs(root, "");
  }
  
  private String dfs(TreeNode root, String curr) {
    if (root == null) {
      return curr;
    }
    curr = "" + (char)(97 + root.val) + curr;
    if (root.left == null && root.right == null) {
      return curr;
    } else if (root.left == null || root.right == null) {
      return root.left == null ? dfs(root.right, curr) : dfs(root.left, curr);
    } else {
      String left = dfs(root.left, curr);
      String right = dfs(root.right, curr);
      return left.compareTo(right)  < = 0 ? left : right;
    }
  }
}
Copy The Code & Try With Live Editor

Input

x
+
cmd
root = [0,1,2,3,4,3,4]

Output

x
+
cmd
"dba"

#2 Code Example with Javascript Programming

Code - Javascript Programming


const smallestFromLeaf = function(root) {
    const res = []
    chk(root, [], res)
    res.sort()
    return res[0]
};

function chk(node, path, res) {
  if(node == null) return
  path.push(node.val)
  if(node.left == null && node.right == null) {
    res.push(arrToStr( path.slice(0).reverse() ))
    return
  }
  chk(node.left, path.slice(0), res)
  chk(node.right, path.slice(0), res)
}

function numToChar(num) {
  const str = 'abcdefghijklmnopqrstuvwxyz'
  return str[num]
}

function arrToStr(arr) {
  let res = ''
  for(let i = 0; i < arr.length; i++) {
    res += numToChar(arr[i]>
  }
  return res
}
Copy The Code & Try With Live Editor

Input

x
+
cmd
root = [0,1,2,3,4,3,4]

Output

x
+
cmd
"dba"

#3 Code Example with Python Programming

Code - Python Programming


class Solution:
    def smallestFromLeaf(self, root: TreeNode, s = '') -> str:
        if not root.right and not root.left:
            return chr(97 + root.val) + s
        if not root.right:
            return self.smallestFromLeaf(root.left, chr(97 + root.val) + s)
        if not root.left:
            return self.smallestFromLeaf(root.right, chr(97 + root.val) + s)
        return min(self.smallestFromLeaf(root.left, chr(97 + root.val) + s), self.smallestFromLeaf(root.right, chr(97 + root.val) + s))
Copy The Code & Try With Live Editor

Input

x
+
cmd
root = [25,1,3,1,3,0,2]

Output

x
+
cmd
"adz"
Advertisements

Demonstration


Previous
#987 Leetcode Vertical Order Traversal of a Binary Tree Solution in C, C++, Java, JavaScript, Python, C# Leetcode
Next
#989 Leetcode Add to Array-Form of Integer Solution in C, C++, Java, JavaScript, Python, C# Leetcode