summaryrefslogtreecommitdiff
path: root/public/assets/javascripts/rectangles/models/tree.js
blob: 7c698fed4bb91903f2c2ac0b4b38646b44301230 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
(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
	}

})()