js版本單詞查詢樹1 0 null

2021-09-29 15:09:41 字數 4013 閱讀 2288

//不熟悉js的undefined,全寫成null了

function

getmap()

for(

let i=

0;i<

26;i++

)return words

}//在node下獲取key對應的val,d是即將比較的字串的長度,如d=2表示即將用key的第2個字元與樹對應的節點進行比較

function

get(node,key,d=0)

//在node下設定key對應的值是val,沒有建立有就覆蓋,d是即將比較的字串的長度

實現深複製的效果,避免位址引用

function

put(node,key,val,d=0)

}if(d==key.length)

else

return node

}//keyswithprefix:返回node節點下以pre開頭的所有key,設定預設值的引數必須放最後,否則報錯,d是即將比較的字串的長度

function

keyswithprefix

(node,pre,list=

,d=0)if

(node.val!=

null

&&d>=pre.length)

if(d>=pre.length)}}

else

return list

}//keysthatmatch:返回匹配的字串,如果a.b對應a[a-z]b

function

keysthamatch

(node,match,list=

,pre="")

if(node.val!=

null

&&pre.length==match.length)

for(

let x in node.next)}}

return list

}//longestprefixof:返回給定字串最長公共字首的key,d1是目前此key的長度,d2是即將比較的字串的長度

//第一次執行時,d2=0表示即將比較根節點和match

function

longestprefixof

(node,match,d1=

0,d2=0)

if(node.val!=

null

)return

longestprefixof

(node.next[match[d2]

],match,d1,d2+1)

}//delete:d是即將比較的字串的長度,刪除key對應節點後,需要把無子節點且沒有val的節點也刪除

function

delete_

(node,key,d=0)

if(d==key.length)

else

for(

let i in node.next)

}return

null

//return null不能省略,因為js沒有返回值時返回undefined,實際邏輯需要null

}//***********************************===

var root=

null

let j1=

require

('./1'

)let mylength=

10000

randomwords=j1.

getwords

(mylength,1,

5)randomwords.

foreach

((x)

=>

)//put隨機字串到以root為根節點的樹

console.

log(

"\n\n\n\n\nrandomwords=\n"

,randomwords)

randomwords.

foreach

((x)

=>})

console.

log(

'\n\n\n-->test keyswithprefix'

)console.

log(

keyswithprefix

(root,

"a")

)//列印以'a'開頭的字串

console.

log(

keyswithprefix

(root,"")

)//列印以所有字串

console.

log(

keyswithprefix

(root,"")

.length)

//長度可能不到mylength,因為有重複的可以key:val

let matchstr=

"..."

console.

log(

'\n\n\n-->test keysthanmatch '

+matchstr)

console.

log(list=

keysthanmatch

(root,matchstr)

)let prefixstr=

"abcd"

console.

log(

'\n\n\n-->test longestprefixof '

+prefixstr)

console.

log(

longestprefixof

(root,prefixstr)

)console.

log(

'\n\n\n-->test delete'

)root=

put(root,

'aaaaaa'

,'a6val'

)root=

put(root,

'aaaaaaaa'

,'a8val'

)console.

log(

keyswithprefix

(root,"",

))console.

log(

get(root,

"aaaaaaaa"))

console.

log(

get(root,

"aaaaaaa"))

console.

log(

get(root,

"aaaaaa"))

console.

log(

get(root,

"aaaaa"))

root=

delete_

(root,

'aaaaaaaa'

)root=

delete_

(root,

'a')

console.

log(

keyswithprefix

(root,"",

))console.

log(

get(root,

"aaaaaaaa"))

console.

log(

get(root,

"aaaaaaa"))

console.

log(

get(root,

"aaaaaa"))

console.

log(

get(root,

"aaaaa"))

//*************************= 1.js**

exports.

getwords

=function

getwords

(maxcount=

20,minlen=

0,maxlen=11)

words.

push

(arr)

}return words

}exports.

char2int

=(a)

=>

單詞查詢樹

兩種方法 給出一些列號碼,若果任乙個號碼不在另乙個中充當字首,那麼這系列號碼是合理的輸出yes,否則輸出no 思路 標頭檔案中find函式的使用,按長度從小到大排列,那麼能當另乙個號碼字首的只能是前乙個當後乙個的字首,所以乙個乙個找 時間複雜度 o n include include include...

單詞查詢樹

一 概念 從上面的圖中,我們或多或少的可以發現一些好玩的特性。第一 根節點不包含字元,除根節點外的每乙個子節點都包含乙個字元。第二 從根節點到某一節點,路徑上經過的字元連線起來,就是該節點對應的字串。第三 每個單詞的公共字首作為乙個字元節點儲存。二 使用範圍 既然學trie樹,我們肯定要知道這玩意是...

單詞查詢樹

在進行文法分析的時候,通常需要檢測乙個單詞是否在我們的單詞列表裡。為了提高查詢和定位的速度,通常都畫出與單詞列表所對應的單詞查詢樹,其特點如下 1 根結點不包含字母,除根結點外每乙個結點都僅包含乙個大寫英文本母 2 從根結點到某一結點,路徑上經過的字母依次連起來所構成的字母序列,稱為該結點對應的單詞...