树的遍历

date
Mar 22, 2023
slug
js-tree-search
status
Published
tags
JavaScript
JavaScript数据结构与算法
Tree
summary
Tree traversal
type
Post

中序遍历

口诀:左根右
inOrderTraverse(callback){
    this.inOrderTraverseNode(this.root,callback);//接收一个节点和对应的回调函数作为参数
}

inOrderTraverseNode(node,callback){
    //检查以参数形式传入的节点是否为 null
    if(node != null){
        this.inOrderTraverseNode(node.left,callback);//访问左侧子节点
        callback(node.key);//根节点操作
        this.inOrderTraverseNode(node.right,callback);//访问右侧子节点
    }
}
调用执行上篇创建的二叉树输出结果
const printNode = (value) => console.log(value);
tree.inOrderTraverse(printNode);
3 5 6 7 8 9 10 11 12 13 14 15 18 20 25
访问路径如下:
notion image

先序遍历

口诀:根左右
preOrderTraverse(callback){
    this.preOrderTraverseNode(this.root,callback);
}
preOrderTraverseNode(node,callback){
    if(node != null){
        callback(node.key);
        this.preOrderTraverseNode(node.left,callback);
        this.preOrderTraverseNode(node.right,callback);
    }
}
11 7 5 3 6 9 8 10 15 13 12 14 20 18 25
preOrderTraverse 的访问路径如下:
notion image

后序遍历

口诀:左右根
postOrderTraverse(callback){
    this.postOrderTraverseNode(this.root,callback);
}
postOrderTraverseNode(node,callback){
    if(node != null){
        this.postOrderTraverseNode(node.left,callback);
    	this.postOrderTraverseNode(node.right,callback);
    	callback(node.key);
    }
}
3 6 5 8 10 9 7 12 14 13 18 25 20 15 11
postOrderTraverse 访问路径如下所示:
notion image
 

© shallrise 2024