(function(){ var Tree = function(n, data){ this.lo = null this.hi = null this.value = n this.data = data } Tree.prototype.find = function(n){ if (n == this.value) return this if (n < this.value) return this.lo ? this.lo.find(n) : this if (n > this.value) return this.hi ? this.hi.find(n) : this } Tree.prototype.add = function(n, data){ var closest = this.find(n) if (n == closest.value) return closest if (n < closest.value) return closest.lo = new Tree(n, data) if (n > closest.value) return closest.hi = new Tree(n, data) } Tree.prototype.toArray = function(){ var a = [] if (this.lo) a = a.concat(this.lo.toArray()) a.push(this.data) if (this.hi) a = a.concat(this.hi.toArray()) return a } Tree.prototype.toString = function(){ var s = ""; if (this.lo) s += this.lo.toString() s += this.value + "," if (this.hi) s += this.hi.toString() return s } Tree.prototype.depth = function(){ if (this.lo && this.hi) return 1 + max(this.lo.depth(), this.hi.depth()) else if (this.lo) return 1 + this.lo.depth() else if (this.hi) return 1 + this.hi.depth() else return 0 } if ('window' in this) { window.Tree = Tree } else { module.exports = Tree } })()