Skip to content

Instantly share code, notes, and snippets.

@galenweber
Last active April 30, 2016 18:50
Show Gist options
  • Save galenweber/7d6df99f7b35ac70180d16663ea8ed52 to your computer and use it in GitHub Desktop.
Save galenweber/7d6df99f7b35ac70180d16663ea8ed52 to your computer and use it in GitHub Desktop.
// Binary search tree
// Functions to insert, generate, and count nodes
// Employs a functional approach
var insert = function(value, tree) {
// First check whether there is a head
// If not, set value as head
if (!tree.value) {
var tree = {
value: value,
left: undefined,
right: undefined
}
return tree;
} else {
if (value > tree.value) {
// If there is no greater value set
if (!tree.right) {
tree.right = {
value: value,
left: undefined,
right: undefined
}
return tree;
} else {
insert(value, tree.right);
return tree;
}
} else if (value < tree.value) {
if (!tree.left) {
tree.left = {
value: value,
left: undefined,
right: undefined
}
return tree;
} else {
return insert(value, tree.left)
}
}
}
}
var genTree = function(array) {
var binaryTree = {};
array.forEach(function(elem) {
binaryTree = insert(elem, binaryTree);
})
return binaryTree;
}
var countNodes = function(tree) {
var treeCount = 1;
if (!tree) {
return 0;
}
treeCount += countNodes(tree.left);
treeCount += countNodes(tree.right);
return treeCount;
}
var countNodesLessEqualVal = function(tree, value) {
if (!tree) {
return 0;
}
console.log("tree is: ", tree)
var nodeCount = 0;
if (value >= tree.value) {
nodeCount += 1;
nodeCount += countNodes(tree.left)
nodeCount += countNodesLessEqualVal(tree.right, value);
} else {
nodeCount += countNodesLessEqualVal(tree.left, value);
}
return nodeCount;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment