对于二叉树的遍历不外乎先序、中序、后序、以及按层遍历,下面以具体代码作为演示:
先序遍历:
先序遍历是以优先于后代节点的顺序访问每个节点的。先序遍历的一种应用是打印一个结构化的文档。
this.preOrderTraverse = function(callback) {
preOrderTraverseNode(root, callback);
};
let preOrderTraverseNode = function(node, callback) {
if(node !== null) {
callback(node.key);
preOrderTraverseNode(node.left, callback);
preOrderTraverseNode(node.right, callback);
}
};
中序遍历:
中序遍历是一种以上行顺序访问BST所有节点的遍历方式,也就是以从最小到最大的顺序访问所有节点。中序遍历的一种应用就是对树进行排序操作。
this.preOrderTraverse = function(callback) {
preOrderTraverseNode(root, callback);
};
let preOrderTraverseNode = function(node, callback) {
if(node !== null) {
preOrderTraverseNode(node.left, callback);
callback(node.key);
preOrderTraverseNode(node.right, callback);
}
};
后序遍历:
后序遍历则是先访问节点的后代节点,再访问节点本身。后序遍历的一种应用是计算一个目
录和它的子目录中所有文件所占空间的大小。
this.preOrderTraverse = function(callback) {
preOrderTraverseNode(root, callback);
};
let preOrderTraverseNode = function(node, callback) {
if(node !== null) {
preOrderTraverseNode(node.left, callback);
preOrderTraverseNode(node.right, callback);
callback(node.key);
}
};
callback 以及函数调用:
function printNode(value){ //{6}
console.log(value);
}
tree.inOrderTraverse(printNode);
按层遍历:
按层遍历之所用 javacript 写,是因为 javaScript 数组的大小不固定,且可以使用 push 达到入队的目的,使用 shift 来达到出队的目的。
let levelOrderTraversal = function(node) {
if(!node) {
return null;
}
let queue = [];
queue.push(node);
while(queue.length !=== 0) {
node = queue.shitf();
console.log(node.value);
if(node.left) {
queue.push(node.left);
}
if(node.right) {
queue.push(node.right);
}
}
}