树的遍历
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
访问路径如下:
先序遍历
口诀:根左右
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 的访问路径如下:
后序遍历
口诀:左右根
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 访问路径如下所示: