General Tree
JavaScript
class Node {
constructor(data) {
this.value = data;
this.children = new LinkedList();
this.next = null;
}
}
class LinkedList {
constructor() {
(this.head = this.tail = null), (this.size = 0);
}
append(node) {
if (!this.tail) {
this.tail = node;
this.head = this.tail;
} else {
let oldTail = this.tail;
this.tail = node;
oldTail.next = this.tail;
}
this.size++;
}
}
class Tree {
constructor() {
this.root = null;
this.count = 0;
}
bfsFindNode(data) {
let queue = [];
queue.push(this.root);
let node;
while (queue.length > 0) {
node = queue.shift();
if (node.children.size > 0) {
let currentNode = node.children.head;
while (currentNode) {
queue.push(currentNode);
currentNode = currentNode.next;
}
}
if (node.value === data) {
return node;
}
}
return false;
}
insert(data, parent) {
let node = new Node(data);
let parentNode;
if (!this.root) {
this.root = node;
this.count++;
return;
}
if (!parent) {
console.log("please specify a parent");
return;
}
parentNode = this.bfsFindNode(parent);
if (!parentNode) {
console.log("that node does not exist");
return;
}
parentNode.children.append(node);
this.count++;
}
contains(data) {
let parentNode = this.bfsFindNode(data);
if (parentNode) {
return true;
}
return false;
}
print() {
if (this.count) {
let queue = [];
queue.push(this.root);
let node;
while (queue.length > 0) {
node = queue.shift();
if (node.children.size > 0) {
let currentNode = node.children.head;
while (currentNode) {
queue.push(currentNode);
currentNode = currentNode.next;
}
}
console.log(node.value);
}
}
}
size()...