// https://en.wikipedia.org/wiki/Trie public class Trie { static class TrieNode { TrieNode[] children = new TrieNode[128]; boolean leaf; } public static void insertString(TrieNode root, String s) { TrieNode cur = root; for (char ch : s.toCharArray()) { if (cur.children[ch] == null) { cur.children[ch] = new TrieNode(); } cur = cur.children[ch]; } cur.leaf = true; } public static void printSorted(TrieNode node, String s) { for (char ch = 0; ch < node.children.length; ch++) { TrieNode child = node.children[ch]; if (child != null) printSorted(child, s + ch); } if (node.leaf) { System.out.println(s); } } // Usage example public static void main(String[] args) { TrieNode root = new TrieNode(); insertString(root, "hello"); insertString(root, "world"); insertString(root, "hi"); printSorted(root, ""); } }