Skip to content

Instantly share code, notes, and snippets.

@astromac
Last active July 17, 2020 19:49
Show Gist options
  • Save astromac/928262b2a0ce4cdae440aaa02597afd6 to your computer and use it in GitHub Desktop.
Save astromac/928262b2a0ce4cdae440aaa02597afd6 to your computer and use it in GitHub Desktop.
Binary Tree Search
/**
see https://codepen.io/chrisbfusion/pen/oNbyppO
sample tree visual
30
|
-------
| |
8 52
|
-------
| |
3 20
|
-------
| |
10 29
**/
const lines = ['8 52', '10 29', '3 29', '3 18', '3 20 29 52', '52 29 3 20'];
let checkArr = [];
let found = 0;
let parent = '';
let answer = '';
const tree = [{
value: '30',
children: {
value: [
{
value: '8',
children: {
value: [
{
value: '3'
},
{
value: '20',
children: {
value: [
{
value: '10'
},
{
value: '29'
}
]
}
}
]
}
},
{
value: '52'
}
]
}
}];
const iterateDown = (found, currentLevel) => {
let thisTree = {};
const checkLength = checkArr.length;
if (Array.isArray(currentLevel)) {
for (let z = 0; z < checkArr.length; z++) {
for (let v = 0; v < currentLevel.length; v++) {
if (currentLevel[v].hasOwnProperty('children')) {
thisTree.value = currentLevel[v].value;
thisTree.children = currentLevel[v].children.value;
for (let x = 0; x < thisTree.children.length; x++) {
if (checkArr[z] === thisTree.children[x].value) {
if (found === 0) {
parent = thisTree.value;
}
found++;
if (found === checkLength) {
answer = parent;
return;
}
}
}
}
}
}
iterateDown(found, thisTree.children);
}
};
for (let i=0; i < lines.length; i++) {
const line = lines[i];
checkArr = line.split(' ');
answer = '';
response = '';
iterateDown(found, tree);
if (answer === '') {
response = `[${checkArr.toString()}] have no common parent`;
} else {
response = `The common parent of [${checkArr.toString()}] is ${answer}`
}
console.log(response);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment