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
*/