Skip to main content

树的遍历

tip

中序遍历:先遍历左子节点,再遍历当前节点,最后遍历右子节点。 前序遍历:先遍历当前节点,再遍历左子节点,最后遍历右子节点。 后序遍历:先遍历左子节点,再遍历右子节点,最后遍历当前节点。

caution

注意:只需要记住中序、前序、后序是相对于中间的节点而言的就好记了。

中序遍历

// 中序遍历
this.inOrderTraverse = function (callback) {
inOrderTraverseNode(root,callback);
}
// inOrderTraverse方法接收一个回调函数参数,这个回调函数用来定义对遍历到的每个节点进行的操作
// inOrderTraverseNode 辅助函数
function inOrderTraverseNode(node, callback){
if (node !== null) {
inOrderTraverseNode(node.left, callback); // 先左
callback(node); // 当前节点中间顺序遍历-----中序
inOrderTraverseNode(node.right, callback);// 后右
}
}

中序遍历的访问路径图: medium

前序遍历

this.preOrderTraverse = function(callback){
preOrderTraverseNode(root, callback);
};
function preOrderTraverseNode(node, callback){
if (node !== null) {
callback(node);
preOrderTraverseNode(node.left, callback);
preOrderTraverseNode(node.right, callback);
}
}

前序遍历的访问路径图: medium

后序遍历

this.postOrderTraverse = function(callback){
postOrderTraverseNode(root, callback);
};

function postOrderTraverseNode(node, callback) {
if (node !== null) {
postOrderTraverseNode(node.left, callback);
postOrderTraverseNode(node.right, callback);
callback(node);
}
}

后序遍历的访问路径图: medium