先上代码:
<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