private void fixupSuffixPointers(final TaskMonitor monitor) throws CancelledException {
		if (versionId > suffixId) {
			LinkedList<ByteTrieNode<T>> queue = new LinkedList<ByteTrieNode<T>>();
			for (int ii = 0; ii < root.children.length; ++ii) {
				ByteTrieNode<T> child = root.children[ii];
				child.suffix = root;
				queue.addLast(child);
			}
			root.suffix = root;
			while (!queue.isEmpty()) {
				monitor.checkCancelled();
				monitor.incrementProgress(1);
				ByteTrieNode<T> node = queue.removeFirst();
				for (int ii = 0; ii < node.children.length; ++ii) {
					ByteTrieNode<T> tmp = node;
					byte id = node.children[ii].getId();
					ByteTrieNode<T> tmpChild = tmp.getChild(id);
					queue.addLast(tmpChild);
					tmp = tmp.suffix;
					while (tmp != root && tmp.getChild(id) == null) {
						tmp = tmp.suffix;
					}
					tmpChild.suffix = tmp.getChild(id);
					if (tmpChild.suffix == null) {
						tmpChild.suffix = root;
					}
				}
			}

			suffixId = getVersionId();
		}
	}
BFS fixup of suffix (failure) pointers, but only if we need to (the 
version id is more advanced than our last suffix fixup id).
@param monitor a task monitor
@throws CancelledException if the user cancels
Ghidra/Features/Base/src/main/java/ghidra/util/search/trie/ByteTrie.java