Python Trie+DFS Solution.
python\nfrom collections import defaultdict\n\nclass TrieNode:\n    def __init__(self):\n        self.children = defaultdict(TrieNode)\n        self.isWord = Fa
```python\nfrom collections import defaultdict\n\nclass TrieNode:\n    def __init__(self):\n        self.children = defaultdict(TrieNode)\n        self.isWord = False\n\nclass Trie:\n    def __init__(self):\n        self.root = TrieNode()\n    def insert(self, word):\n        cur = self.root\n        for letter in word:\n            cur = cur.children[letter]\n        cur.isWord = True\n\nclass Solution:\n    def dfs(self, root, s):\n        if root.isWord and len(s) > len(self.res):\n            self.res = s\n        for k in sorted(root.children):\n            if root.children[k].isWord:\n                self.dfs(root.children[k], s+k)\n    \n    def longestWord(self, words: List[str]) -> str:\n        self.res = \'\'\n        trie = Trie()\n        for word in words:\n            trie.insert(word)\n        root = trie.root\n        self.dfs(root, \'\')\n        \n        return self.res\n```
[]