如何按字母顺序列出三元搜索树的单词?

时间:2014-11-27 21:05:26

标签: algorithm data-structures tree tree-traversal ternary-search-tree

如何按字母顺序列出TST包含的字词?

与按顺序遍历可以解决问题的BST不同,这不会起作用TST。也不会预先订购也不会下订单。

更重要的是,TST的节点包含字母而不是字,而不是某些BST实现的节点。当从左节点移动到右节点时,有一些字母表不包括在内。

我似乎能够理解它。

下图按字母顺序显示了TST的单词列表。

TST

图片来自:http://www.geeksforgeeks.org/ternary-search-tree/

1 个答案:

答案 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);
    }
}

希望这有帮助!