先上代码:
<script>
var count=0;
function BinaryTree(){
var Node=function(key){
this.key=key;
this.left=null;
this.right=null;
}
var insertNode=function(node,newNode){
if(node.key>newNode.key){
if(node.left==null){
node.left=newNode
}else{
insertNode(node.left,newNode)
}
}else{
if(node.right==null){
node.right=newNode
}else{
insertNode(node.right,newNode)
}
}
}
var root=null;
this.insert=function(key){
var newNode=new Node(key);
if(root==null){
root=newNode
}else{
insertNode(root,newNode);
console.log(root);
}
console.log(count++);
}
this.inOrderTraverse=function(callback){
inOrderTraverseNode(root,callback)
}
var inOrderTraverseNode=function(node,callback){
if(node!==null){
inOrderTraverseNode(node.left,callback) ;
callback(node.key);
inOrderTraverseNode(node.right,callback)
}
}
}
var nodes=[8,3,10,1,6,14,7,13];
var binaryTree=new BinaryTree();
nodes.forEach(function(key){
binaryTree.insert(key);
})
//中序遍历二叉树
var callback=function(key){
console.log(key);
}
binaryTree.inOrderTraverse(callback)
</script>
因为是接着上一篇文章《二叉树排序》,if you haven’t got last article,just click 二叉树排序
这里主要是增加了中序遍历的方法:inordertraverse和回调函数,在这个函数中,分别遍历函数的左节点,右节点;
this.inOrderTraverse=function(callback){
inOrderTraverseNode(root,callback)
}
var inOrderTraverseNode=function(node,callback){
if(node!==null){
inOrderTraverseNode(node.left,callback) ;
callback(node.key);
inOrderTraverseNode(node.right,callback)
}
}
这里为了便于观察;我们的回调函数中选择将当前的值进行打印
var callback=function(key){
console.log(key);
}
最后我们进行调用:
binaryTree.inOrderTraverse(callback)
结果如下:
1
3
6
7
8
10
13
14