Skip to content

Instantly share code, notes, and snippets.

@Spuffynism
Last active November 21, 2017 17:23
Show Gist options
  • Save Spuffynism/fba226062ac70baca32448de622caa4c to your computer and use it in GitHub Desktop.
Save Spuffynism/fba226062ac70baca32448de622caa4c to your computer and use it in GitHub Desktop.
binary tree visiting algorithms
function Node (name) {
this.name = name;
this.left = null;
this.right = null;
}
function BinaryTree (node) {
this.node = node;
this.visit = function(fn) {
return fn(this.node);
};
this.insert = function (name) {
this._insert(this.node, name);
};
this._insert = function (node, name) {
if (name < node.name) {
node.left
? this._insert(node.left, name)
: node.left = new Node(name);
} else if (name > node.name) {
node.right
? this._insert(node.right, name)
: node.right = new Node(name);
}
};
}
var preOrder = (node) => {
if (node === null) return [];
return [node.name].concat(preOrder(node.left), preOrder(node.right));
};
var postOrder = (node) => {
if (node === null) return [];
return postOrder(node.left).concat(postOrder(node.right), [node.name]);
};
var symmetric = (node) => {
if (node === null) return [];
return symmetric(node.left).concat([node.name], symmetric(node.right));
};
var r = new Node('R'),
m = new Node('M'),
n = new Node('N'),
a = new Node('A'),
b = new Node('B'),
t = new Node('T'),
o = new Node('O'),
q = new Node('Q');
r.left = m;
r.right = n;
m.left = a;
a.right = t;
m.right = b;
n.left = o;
n.right = q;
var tree = new BinaryTree(r);
tree.insert('V');
console.log("preOrder:", tree.visit(preOrder));
console.log("postOrder:", tree.visit(postOrder));
console.log("symmetric:", tree.visit(symmetric));
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment