3
private final TrieNode trie = new TrieNode(' ');7
private Character digit;9
private boolean isWord;10
private Map<Character, TrieNode> children;12
TrieNode(Character c) {15
this.children = new HashMap<>();18
void insert(String s) {19
TrieNode current = this;20
for (Character c : s.toCharArray()) {21
current = current.children.computeIfAbsent(c, k -> new TrieNode(c));24
current.isWord = true;27
List<Integer> getWordsPreOrder() {28
return getWordsPreOrder(this);31
private List<Integer> getWordsPreOrder(TrieNode root) {32
List<Integer> result = new ArrayList<>();38
result.add(Integer.parseInt(root.value));40
for (TrieNode node : root.children.values()) {41
result.addAll(getWordsPreOrder(node));47
public List<Integer> lexicalOrder(int n) {48
for (int i = 1; i <= n; i++) {49
trie.insert(String.valueOf(i));51
return trie.getWordsPreOrder();