| 1 | Insert 'a' | root -> a(end=False) | root.children['a'] created | root
└─ a (end=False) |
| 2 | Insert 'app' | root -> a(end=False) -> p(end=False) -> p(end=True) | a.children['p'] created, p.children['p'] created, mark end_of_word at last p | root
└─ a (end=False)
└─ p (end=False)
└─ p (end=True) |
| 3 | Insert 'apple' | root -> a -> p -> p(end=True) -> l(end=False) -> e(end=True) | p.children['l'] created, l.children['e'] created, mark end_of_word at e | root
└─ a
└─ p
└─ p (end=True)
└─ l
└─ e (end=True) |
| 4 | Insert 'apply' | root -> a -> p -> p(end=True) -> l -> y(end=True) | l.children['y'] created, mark end_of_word at y | root
└─ a
└─ p
└─ p (end=True)
└─ l
├─ e (end=True)
└─ y (end=True) |
| 5 | Insert 'banana' | root -> a ... and b(end=False) -> a -> n -> a -> n -> a(end=True) | root.children['b'] created, chain created for banana, mark end_of_word at last a | root
├─ a
│ └─ p
│ └─ p (end=True)
│ └─ l
│ ├─ e (end=True)
│ └─ y (end=True)
└─ b
└─ a
└─ n
└─ a
└─ n
└─ a (end=True) |
| 6 | DFS start at root | No change | Set longest_word = '' | No visual change |
| 7 | DFS visit 'a' node (end=False) | No change | Skip since end_of_word is False | No visual change |
| 8 | DFS visit 'a' -> 'p' (end=False) | No change | Skip since end_of_word is False | No visual change |
| 9 | DFS visit 'a' -> 'p' -> 'p' (end=True) | No change | Update longest_word = 'app' | No visual change |
| 10 | DFS visit 'a' -> 'p' -> 'p' -> 'l' (end=False) | No change | Skip since end_of_word is False | No visual change |
| 11 | DFS visit 'a' -> 'p' -> 'p' -> 'l' -> 'e' (end=True) | No change | Update longest_word = 'apple' | No visual change |
| 12 | DFS visit 'a' -> 'p' -> 'p' -> 'l' -> 'y' (end=True) | No change | longest_word remains 'apple' (apple < apply lex order) | No visual change |
| 13 | DFS visit 'b' node (end=False) | No change | Skip since end_of_word is False | No visual change |
| 14 | DFS visit 'b' -> 'a' (end=False) | No change | Skip since end_of_word is False | No visual change |
| 15 | DFS visit 'b' -> 'a' -> 'n' (end=False) | No change | Skip since end_of_word is False | No visual change |
| 16 | DFS visit 'b' -> 'a' -> 'n' -> 'a' (end=False) | No change | Skip since end_of_word is False | No visual change |
| 17 | DFS visit 'b' -> 'a' -> 'n' -> 'a' -> 'n' (end=False) | No change | Skip since end_of_word is False | No visual change |
| 18 | DFS visit 'b' -> 'a' -> 'n' -> 'a' -> 'n' -> 'a' (end=True) | No change | longest_word remains 'apple' (banana longer but prefixes missing) | No visual change |
| 19 | DFS complete | No change | Return longest_word = 'apple' | No visual change |