function BinaryTree(){
var root = null;
function Node(key){
this.key = key;
this.left = null;
this.right = null;
}
this.insert = function(key){
var newNode = new Node(key);
if(root === null){
root = newNode;
}else{
insertNode(root,newNode)
}
}
var insertNode = function(node,newNode){
if(newNode.key < node.key){
if(node.left === null){
node.left = newNode;
}else{
insertNode(node.left,newNode)
}
}else{
if(newNode.key > node.key){
if(node.right === null){
node.right = newNode;
}else{
insertNode(node.right,newNode)
}
}
}
}
this.preTravel = function(callback){
preTravelNode(root,callback);
}
function preTravelNode(node,callback){
if(node !== null){
callback(node.key);
preTravelNode(node.left,callback);
preTravelNode(node.right,callback);
}
}
this.middleTravel = function(callback){
middleTravelNode(root,callback);
}
function middleTravelNode(node,callback){
if(node !== null){
middleTravelNode(node.left,callback);
callback(node.key);
middleTravelNode(node.right,callback);
}
}
this.nextTravel = function(callback){
nextTravelNode(root,callback);
}
function nextTravelNode(node,callback){
if(node !== null){
nextTravelNode(node.left,callback);
nextTravelNode(node.right,callback);
callback(node.key);
}
}
}
var nodes = [8,7,3,4,6,5,2,9,12]
var binaryTree = new BinaryTree();
nodes.forEach((item)=>{
binaryTree.insert(item)
})
binaryTree.beforeTravel((key)=>{
console.log(key)
})
console.log('--------------------')
binaryTree.middleTravel((key)=>{
console.log(key)
})
console.log('--------------------')
binaryTree.nextTravel((key)=>{
console.log(key)
})