Sorted Binary Tree

Run Settings
LanguageJavaScript
Language Version
Run Command
function BinaryNode(v, compareFunction ){ this._value = v; this._leftNode = null; this._rightNode = null; this.comparator = compareFunction || function( a, b ){ if( typeof a === typeof b ){ if( typeof a === "string" ){ if( a == b ){ return 0; } else if( a > b ){ return 1; } else if( a < b ){ return -1; } } else if( typeof a === "number" ){ return a - b; } else { return 0; } } else { return 0; } }; } BinaryNode.prototype = { get value(){ return this._value; }, set value(v){ if( v ){ this._value = v; } }, get leftNode(){ return this._leftNode; }, set leftNode(node){ if( node instanceof BinaryNode ){ this._leftNode = node; } }, get rightNode(){ return this._rightNode; }, set rightNode(node){ if( node instanceof BinaryNode ){ this._rightNode = node; } }, isLeaf(){ return !this._leftNode && !this._rightNode; }, addToLeft(node){ if( node instanceof BinaryNode ){ if( this._leftNode ){ this._leftNode.addNode(node); } else { console.log( "Grafted ", node.value, " to left" ); this._leftNode = node; } } }, addToRight(node){ if( node instanceof BinaryNode ){ if( this._rightNode ){ this._rightNode.addNode(node); } else { console.log( "Grafted ", node.value, " to right" ); this._rightNode = node; } } }, addNode(node){ if( node instanceof BinaryNode ){ var compareValue = this.comparator( this.value, node.value ); if( compareValue < 0 ){ console.log( "Add ", node.value, " to left" ); this.addToLeft(node); } else { console.log( "Add ", node.value, " to right" ); this.addToRight(node); } } } } function BinaryTree( compareFunction ){ this.root = null; this.comparator = compareFunction || null; } BinaryTree.prototype = { add(value){ if( typeof value !== "undefined" && value !== null ){ console.log( "Adding ", value ); if( this.root ){ var newNode = new BinaryNode(value, this.comparator); this.root.addNode(newNode); } else { console.log( "Add ", value, " to root" ); this.root = new BinaryNode(value, this.comparator); } } }, }; var tree = new BinaryTree(); var testArray = [ 0, 99, 3, 55, 15, 2, 50, 100, 6 ]; for( var i = 0; i < testArray.length; i++ ){ tree.add(testArray[i]); } function traverseLeft( node, func ){ if( node ){ if( node.isLeaf() ){ func(node.value); } else { traverseLeft(node.leftNode, func ); func(node.value); traverseLeft(node.rightNode, func ); } } } function traverseRight( node, func ){ if( node ){ if( node.isLeaf() ){ func(node.value); } else { traverseRight(node.rightNode, func); func(node.value); traverseRight(node.leftNode, func ); } } } traverseLeft(tree.root, (x)=>console.log(x) ); console.log( " === " ); traverseRight(tree.root, (x)=>console.log(x) );
Editor Settings
Theme
Key bindings
Full width
Lines