Skip to content

Instantly share code, notes, and snippets.

@jeremysu0131
Last active June 7, 2018 15:19
Show Gist options
  • Save jeremysu0131/4546ad712f6efadf68417b59905f8016 to your computer and use it in GitHub Desktop.
Save jeremysu0131/4546ad712f6efadf68417b59905f8016 to your computer and use it in GitHub Desktop.
Binary Search Tree
function BinarySearchTree() {
function Node(key) {
this.key = key;
this.left = null;
this.right = null;
}
let root = null;
var insertNode = function (node, newNode) {
if (newNode.key < node.key) {
if (node.left === null) node.left = newNode;
else insertNode(node.left, newNode);
} else {
if (node.right === null) node.right = newNode;
else insertNode(node.right, newNode);
}
}
this.insert = function (key) {
const newNode = new Node(key);
if (root === null) {
root = newNode;
} else {
insertNode(root, newNode);
}
}
var inOrderTraversal = function (node) {
if (node.left) inOrderTraversal(node.left);
console.log(node.key);
if (node.right) inOrderTraversal(node.right);
}
this.inOrderTraversal = function () {
if (root) inOrderTraversal(root);
}
var preOrderTraversalNode = function (node) {
console.log(node.key);
if (node.left) preOrderTraversalNode(node.left);
if (node.right) preOrderTraversalNode(node.right);
}
this.preOrderTraversal = function () {
if (root) preOrderTraversalNode(root);
}
var postOrderTraversalNode = function (node) {
if (node.left) postOrderTraversalNode(node.left);
if (node.right) postOrderTraversalNode(node.right);
console.log(node.key);
}
this.postOrderTraversal = function () {
if (root) postOrderTraversalNode(root);
}
}
var bst = new BinarySearchTree();
bst.insert(4);
bst.insert(7);
bst.insert(2);
bst.insert(3);
bst.insert(1);
bst.insert(8);
// 4
// / \
// 2 7
// / \ \
//1 3 8
bst.inOrderTraversal();
console.log('---');
bst.preOrderTraversal();
console.log('---');
bst.postOrderTraversal();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment