zoukankan      html  css  js  c++  java
  • Trie树

    import scala.collection.mutable.{ArrayBuffer, Map}
    
    
    class TrieTree
    {
        private var root: TrieNode = new TrieNode()
    
    
        def insert(word: String)
        {
            var (text, node) = (word.trim, root)
    
            text.foreach( c =>
                node = node.children.getOrElseUpdate(c, new TrieNode())
            )
    
            node.terminable = true
            node.count += 1
        }
    
        def find(word: String): Boolean =
        {
            var node = root
    
            word.foreach ( c => {
                if (!node.children.contains(c)) return false
                node = node.children(c)
            })
    
            node.terminable
        }
    
        def delete(word: String)
        {
            if (!find(word)) return
            deleteText(word, root)
        }
    
        private def deleteText(word: String, node: TrieNode): Boolean =
        {
            if (word.length == 0) {
                node.terminable = false
                return node.children.isEmpty
            }
    
            if (deleteText(word.substring(1), node.children(word.charAt(0).toChar))) {
                node.children -= word.charAt(0).toChar
                if (node.children.isEmpty && node.terminable == false) true
            }
    
            false
        }
    
        def traverse(): Unit = traverseTrie(root, new StringBuffer())
    
        private def traverseTrie(node: TrieNode, word: StringBuffer)
        {
            if (node.terminable) {
                println(word + "------" + node.count)
                if (node.children.isEmpty) return
            }
    
            val children = node.children.keySet
    
            children foreach { c =>
                traverseTrie(node.children(c), word.append(c))
                word.deleteCharAt(word.length() - 1)
            }
        }
    
    
        class TrieNode
        {
            var terminable = false
    
            var count = 0
    
            var children: Map[Char, TrieNode] = Map[Char, TrieNode]()
        }
    }
    
    
    object TrieTree
    {
        def main(args: Array[String])
        {
            val trie = new TrieTree()
    trie.insert("abcd") trie.insert("cd") trie.insert("abdr") trie.traverse() trie.delete("cd") println(" " + trie.find("cd")) } }

      

  • 相关阅读:
    事后诸葛亮
    OVS常用命令
    阿里云部署杂记
    Alpha冲刺总结
    测试随笔
    Alpha冲刺集合
    项目Alpha冲刺Day12
    项目Alpha冲刺Day11
    项目Alpha冲刺Day10
    MySQL修改密码
  • 原文地址:https://www.cnblogs.com/rilley/p/3713289.html
Copyright © 2011-2022 走看看