接数据结构-初学二叉树创建文章后,我们在来对二叉树进行中序排序,输出一个有序数据。
二叉树的中序遍历就是首先遍历左子树,然后访问当前节点,最后遍历右子树。对于下面的二叉树,中序遍历结果如下:
这是思路最简单的方法,容易想到并且容易实现。递归的终止条件是当前节点是否为空。首先递归调用遍历左子树,然后访问当前节点,最后递归调用右子树。代码如下:
function BinaryTree(){
var Node = function(key){
this.key = key;
this.left = null;
this.right = null;
}
//插入节点 大于旧节点,放在node.right 小于旧节点,放在node.left
var insertNode = function(node,newNode){
if(newNode.key <node.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)
}
}
//遍历节点 左子树 父 右子树
var inOrderTraverseNode = function(node,callback){
if(node !== null){
inOrderTraverseNode(node.left,callback)
callback(node.key)
inOrderTraverseNode(node.right,callback)
}
}
//中序遍历
this.inOrderTraverse = function(callback){
inOrderTraverseNode(root,callback)
}
}
var nodes = [8,3,10,1,6,14,4,7,13]
var binaryTree = new BinaryTree()
nodes.forEach(key =>{
binaryTree.insert(key)
})
//回调函数只做打印当前值
var callback = function(key){
console.log(key)
}
binaryTree.inOrderTraverse(callback)
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。