如何按字母顺序列出TST包含的字词?
与按顺序遍历可以解决问题的BST不同,这不会起作用TST。也不会预先订购也不会下订单。
更重要的是,TST的节点包含字母而不是字,而不是某些BST实现的节点。当从左节点移动到右节点时,有一些字母表不包括在内。
我似乎能够理解它。
下图按字母顺序显示了TST的单词列表。
答案 0 :(得分:4)
您可以将三元搜索树视为不同二叉搜索树的层次结构 - 黑线将同一BST中的节点连接在一起,虚线将不同的BST连接在一起。
您可以通过修改的inorder遍历来列出TST中的所有单词。具体来说,进行inorder遍历,并在每个节点上递归列出链接到当前节点的TST中的所有单词,前缀为目前路径上的任何字母。
这是一些伪代码:
function tst_inorder_traversal(node) {
_tst_inorder_traversal_aux(node, "");
}
function _tst_inorder_traversal_aux(node, prefix) {
if (node is not null) {
/* Start normal in-order traversal.
This prints all words that come alphabetically before the words rooted here.*/
_tst_inorder_traversal_aux(node->left, prefix);
/* List all words starting with the current character. */
if (node marks the end of the word)
print(prefix + tree->character);
_tst_inorder_traversal_aux(node->middle, prefix + node->character);
/* Finish the in-order traversal by listing all words that come after this word.*/
_tst_inorder_traversal_aux(node->right, prefix);
}
}
希望这有帮助!