Ordered Binary Tree - Sorting Traversal

Run Settings
LanguageJavaScript
Language Version
Run Command
function OrderedBinaryTree(value){ this.value = value || null; this.left = null; this.right = null; } OrderedBinaryTree.prototype.addRight = function(value){ if( this.right ){ this.right.addNode(value); } else { this.right = new OrderedBinaryTree(value); } }; OrderedBinaryTree.prototype.addLeft = function(value){ if( this.left ){ this.left.addNode(value); } else { this.left = new OrderedBinaryTree(value); } }; OrderedBinaryTree.prototype.addNode = function(value){ if( this.value ){ if( typeof value === "number" ){ if( value > this.value ){ this.addRight(value); } else { this.addLeft(value); } } else { this.addLeft(value); } } else { //Root Node if( this.isLeaf() ){ this.addLeft(value); } else { if( this.left && this.right ){ if( value > this.left.value ){ this.addRight(value); } else { this.addLeft(value); } } else if( !this.right ){ this.addRight(value); } else { this.addLeft(value); } } } } OrderedBinaryTree.prototype.isLeaf = function(){ return !this.left && !this.right; } var root = new OrderedBinaryTree(null); var sortTarget = [1, 9, 2, 50, 100, 34, 3 ]; for( var i in sortTarget ){ root.addNode(sortTarget[i]); } function accumulator( prev, current ){ prev = prev || []; if( current ){ prev.push(current); }return prev; } function traverse( node, accumulator, prev, ascending ){ ascending = ( typeof ascending !== "undefined" )? ascending : true; if( node ){ if( node.isLeaf() ){ return accumulator( prev, node.value ); } else { var traversalPreference = [node.left, node.right]; if(!ascending){ traversalPreference = [node.right, node.left]; } prev = traverse(traversalPreference[0],accumulator, prev, ascending ); prev = accumulator(prev, node.value); prev = traverse(traversalPreference[1],accumulator, prev, ascending ); return prev; } } else { return prev; } } console.log( "Target Array : ", sortTarget ); console.log( "Sorted Array (ascending) : ", traverse(root,accumulator) ); console.log( "Sorted Array (descending): ", traverse(root,accumulator, [], false) );
Editor Settings
Theme
Key bindings
Full width
Lines