الخصائص الرئيسية ل trie:
Search
Search Search
تنفيذ Trie الأساسي في JavaScript:
class TrieNode { constructor() { this.children = {}; // Stores child nodes this.isEndOfWord = false; // Marks the end of a word } } class Trie { constructor() { this.root = new TrieNode(); } // Insert a word insert(word) { let node = this.root; for (let char of word) { if (!node.children[char]) { node.children[char] = new TrieNode(); } node = node.children[char]; } node.isEndOfWord = true; // Mark the end of the word } // Search for a word search(word) { let node = this.root; for (let char of word) { if (!node.children[char]) { return false; } node = node.children[char]; } return node.isEndOfWord; } // Check if any word starts with the given prefix startsWith(prefix) { let node = this.root; for (let char of prefix) { if (!node.children[char]) { return false; } node = node.children[char]; } return true; } } // Example usage const trie = new Trie(); trie.insert("apple"); console.log(trie.search("apple")); // true console.log(trie.search("app")); // false console.log(trie.startsWith("app")); // true trie.insert("app"); console.log(trie.search("app")); // true
delete (word ، node = this.root ، depth = 0) {
if (depth === word.length) {
if (! node.isendofword) return false ؛ // الكلمة غير موجودة
node.isendofword = false ؛
return Object.Keys (node.children) .Length === 0 ؛ // تحقق مما إذا كانت العقدة لديها أطفال
}
const char = كلمة [العمق] ؛
if (! node.children [char]) العودة false ؛
const يجب أن deledeletechild = this.delete (كلمة ، node.children [char] ، العمق 1) ؛
إذا (يجب أن (يجب أن يكون deletechild) {
حذف node.children [char] ؛
إرجاع Object.Keys (node.children) .Length === 0 &&! node.isendofword ؛
}
العودة كاذبة
}
delete(word, node = this.root, depth = 0) { if (depth === word.length) { if (!node.isEndOfWord) return false; // Word doesn't exist node.isEndOfWord = false; return Object.keys(node.children).length === 0; // Check if node has children } const char = word[depth]; if (!node.children[char]) return false; const shouldDeleteChild = this.delete(word, node.children[char], depth 1); if (shouldDeleteChild) { delete node.children[char]; return Object.keys(node.children).length === 0 && !node.isEndOfWord; } return false; }:
countwordswithprefix (بادئة) {
دع العقدة = this.root ؛
ل (دع char من البادئة) {
if (! node.children [char]) return 0 ؛
العقدة = node.children [char] ؛
}
إرجاع this._countwords (العقدة) ؛
}
_countwords (العقدة) {
دع العد = node.isendofword؟ 1: 0 ؛
لـ (دع char in node.children) {
count = this._countwords (node.children [char]) ؛
}
عدد العائد
}
countWordsWithPrefix(prefix) { let node = this.root; for (let char of prefix) { if (!node.children[char]) return 0; node = node.children[char]; } return this._countWords(node); } _countWords(node) { let count = node.isEndOfWord ? 1 : 0; for (let char in node.children) { count = this._countWords(node.children[char]); } return count; }:
getWordswithPrefix (بادئة) {
دع العقدة = this.root ؛
ل (دع char من البادئة) {
if (! node.children [char]) return [] ؛
العقدة = node.children [char] ؛
}
إرجاع this._collectwords (العقدة ، بادئة) ؛
}
_collectwords (العقدة ، بادئة) {
دع النتائج = [] ؛
if (node.isendofword) results.push (بادئة) ؛
لـ (دع char in node.children) {
النتائج = النتائج.
}
نتائج العودة
}
getWordsWithPrefix(prefix) { let node = this.root; for (let char of prefix) { if (!node.children[char]) return []; node = node.children[char]; } return this._collectWords(node, prefix); } _collectWords(node, prefix) { let results = []; if (node.isEndOfWord) results.push(prefix); for (let char in node.children) { results = results.concat(this._collectWords(node.children[char], prefix char)); } return results; }
تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3