从单词创建 Tree/Trie
Create a Tree/Trie from a word
我需要一些帮助来创建一个 javascript 算法,该算法可以用单词构建树。树的节点是始终按字母顺序排列的单词字母。前任。 'balance' 应该是这个对象:
const tree = {
b: {
l: {
n: {}
},
n: {}
},
a: {
l: {
n: {
}
},
n: {
},
c: {
e: {
}
},
e: {
}
}
....
}
}
const asArray = a.split('')
const tree = {}
for (let i = 0; i < a.length; i++) {
const letter = array[i];
const greaterThan = asArray.filter((value, index) => {
return value > letter && index > i
})
tree[letter] = {}
for (let j = 0; j < greaterThan.length; j++) {
const gt = greaterThan[j];
tree[letter][gt] = {}
}
}
一个javascript对象,键是字母。
你可以得到字符串中所有有序的部分,然后构建树。
function getParts(string) {
function iter(i, left) {
var last = left[left.length - 1];
if (i >= string.length) {
if (left.length) result.push(left);
return;
}
if (!last || last < string[i] ) iter(i + 1, left.concat(string[i]));
iter(i + 1, left);
}
var result = [];
iter(0, []);
return result;
}
var string = 'balance',
tree = getParts(string).reduce((r, a) => {
a.reduce((o, k) => o[k] = o[k] || {}, r);
return r
}, {});
console.log(tree);
.as-console-wrapper { max-height: 100% !important; top: 0; }
一个完整的递归风格。
function setParts(target, [key, ...values], last = '') {
if (!key) return;
if (last < key) setParts(target[key] = target[key] || {}, values, key);
setParts(target, values, last);
}
var string = 'balance',
tree = {};
setParts(tree, string);
console.log(tree);
.as-console-wrapper { max-height: 100% !important; top: 0; }
我需要一些帮助来创建一个 javascript 算法,该算法可以用单词构建树。树的节点是始终按字母顺序排列的单词字母。前任。 'balance' 应该是这个对象:
const tree = {
b: {
l: {
n: {}
},
n: {}
},
a: {
l: {
n: {
}
},
n: {
},
c: {
e: {
}
},
e: {
}
}
....
}
}
const asArray = a.split('')
const tree = {}
for (let i = 0; i < a.length; i++) {
const letter = array[i];
const greaterThan = asArray.filter((value, index) => {
return value > letter && index > i
})
tree[letter] = {}
for (let j = 0; j < greaterThan.length; j++) {
const gt = greaterThan[j];
tree[letter][gt] = {}
}
}
一个javascript对象,键是字母。
你可以得到字符串中所有有序的部分,然后构建树。
function getParts(string) {
function iter(i, left) {
var last = left[left.length - 1];
if (i >= string.length) {
if (left.length) result.push(left);
return;
}
if (!last || last < string[i] ) iter(i + 1, left.concat(string[i]));
iter(i + 1, left);
}
var result = [];
iter(0, []);
return result;
}
var string = 'balance',
tree = getParts(string).reduce((r, a) => {
a.reduce((o, k) => o[k] = o[k] || {}, r);
return r
}, {});
console.log(tree);
.as-console-wrapper { max-height: 100% !important; top: 0; }
一个完整的递归风格。
function setParts(target, [key, ...values], last = '') {
if (!key) return;
if (last < key) setParts(target[key] = target[key] || {}, values, key);
setParts(target, values, last);
}
var string = 'balance',
tree = {};
setParts(tree, string);
console.log(tree);
.as-console-wrapper { max-height: 100% !important; top: 0; }