Last active
April 30, 2016 18:50
-
-
Save galenweber/7d6df99f7b35ac70180d16663ea8ed52 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// 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