树的遍历详解:Mr.J--树的遍历方式详解
Javascript实现二叉树:Javascript -- 二叉树实现
先序遍历的顺序:NLR(根节点->左结点->右结点)
中序遍历的顺序:LNR(左节点->根结点->右结点)
后序遍历的顺序:LRN(左结点->右结点->根节点)
先序遍历
先序遍历的顺序:NLR(根节点->左结点->右结点)
//前序遍历代码实现
var preOrderTraverseNode = function (node, callback) {
if (node !== null) {
callback(node.key); //根节点
preOrderTraverseNode(node.left, callback); //左节点
preOrderTraverseNode(node.right, callback); //右节点
}
}
this.preOrderTraverse = function (callback) {
//回调函数
preOrderTraverseNode(root, callback);
}
测试
var nodes = [8, 3, 10, 1, 6, 14, 4, 7, 13];
var binaryTree = new BinaryTree();
nodes.forEach(function (key) {
binaryTree.insert(key);
});
//遍历整个二叉树
var callback = function (key) {
console.log(key);
}
binaryTree.preOrderTraverse(callback);
中序遍历
中序遍历的顺序:LNR(左节点->根结点->右结点)
//中序遍历代码实现
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(function (key) {
binaryTree.insert(key);
});
//遍历整个二叉树
var callback = function (key) {
console.log(key);
}
binaryTree.inOrderTraverse(callback);
后序遍历
后序遍历的顺序:LRN(左结点->右结点->根节点)
//后序遍历代码实现
var postOrderTraverseNode = function (node, callback) {
if (node !== null) {
postOrderTraverseNode(node.left, callback); //左节点
postOrderTraverseNode(node.right, callback); //右节点
callback(node.key); //根节点
}
}
this.postOrderTraverse = function (callback) {
//回调函数
postOrderTraverseNode(root, callback);
}
测试
var nodes = [8, 3, 10, 1, 6, 14, 4, 7, 13];
var binaryTree = new BinaryTree();
nodes.forEach(function (key) {
binaryTree.insert(key);
});
//遍历整个二叉树
var callback = function (key) {
console.log(key);
}
binaryTree.postOrderTraverse(callback);