Leetcode刷题( 208题 )——实现 Trie (前缀树)

一、题目描述

在这里插入图片描述

二、示例

在这里插入图片描述

三、解题思路

在这里插入图片描述

如图所示,比较前缀树比较类似于二叉树,主要的区别是在于前缀树每一个可以产生存在26个节点,而二叉树则
产生2个节点一个是左节点,另一个是右节点。
插入单词的思路:遍历单词的每一个字符,不断地进行迭代(在图中是自上而下的过程)。在每一个节点需要保
存一个isEnd来确保是否是单词结束的位置,如果单词在该节点结束,则isEnd设置为true.
查询单词的思路:遍历单词中的每一个字符,不断的进行迭代(在图中为自上而下的过程)。在过程中如果不存在该字符所对应的节点,则直接返回false,如果存在并且到达单词的最后,判断isEnd是否为true。
判断是否存在以某一个单词片段开头:遍历每一个单词,不断地进行迭代(在图中为自上而下的过程)。在过程中如果不存在该字符所对应的节点,则直接返回false。

四、代码展示

var Trie = function() {
    this.root = {}
};

/** 
 * @param {string} word
 * @return {void}
 */
Trie.prototype.insert = function(word) {
    let node = this.root
    for(let i of word) {
        if(!node[i]) {
            node[i] = {}    
        }
        node = node[i]
    }
    node.isEnd = true
};

/** 
 * @param {string} word
 * @return {boolean}
 */
Trie.prototype.search = function(word) {
    let node = this.root
    for(let i of word) {
        if(!node[i]) {
            return false
        }
        node = node[i]
    }
    return node.isEnd ? true : false
};

/** 
 * @param {string} prefix
 * @return {boolean}
 */
Trie.prototype.startsWith = function(prefix) {
    let node = this.root
    for(let i of prefix) {
        if(!node[i]) {
            return false
        }
        node = node[i]
    }
    return true
};

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值