Tree
by Abhishek Kumar
JavaScript
class Render {
constructor() {
this.data = [];
}
node(id, label) {
let nodeObj = {};
nodeObj[id] = {
label: label,
children: []
};
return nodeObj;
}
}
class Tree {
constructor() {
this.data = {};
}
node(label) {
return {
label: label,
child: {}
};
}
traverse(uniqueId, branch) {
for (let nodeId in branch) {
if (nodeId == uniqueId) {
return this.data[nodeId];
} else {
return this.traverse(uniqueId, branch[nodeId].child);
}
}
}
generate(table) {
for (let i = 0; i < table.length; i++) {
let [uniqueId, label, parentId] = table[i];
if (parentId == 0) {
this.data[uniqueId] = this.node(label);
} else {
let parentNode = this.traverse(parentId, this.data);
parentNode.child[uniqueId] = this.node(label);
}
}
}
}
class Store {
constructor() {
this.counter = 0;
this.data = [];
}
insert(id, label) {
let uniqueId = ++this.counter,
parentId = id;
this.data.push([uniqueId, label, parentId]);
}
}
let store = new Store();
store.insert(0, 'root');
store.insert(1, 'ant');
store.insert(1, 'bear');
store.insert(3, 'cat');
store.insert(3, 'dog');
store.insert(5, 'elephant');
store.insert(1, 'frog');
console.log(store.data);
let tree = new Tree();
tree.generate(store.data);
console.log(tree.data);
/*
1: root
2: ant
3: bear
4: cat
5: dog
6: elephant
7: frog
*/