整体介绍
几种遍历方式
- 前序遍历:根结点 ---> 左子树 ---> 右子树
- 中序遍历:左子树---> 根结点 ---> 右子树
- 后序遍历:左子树 ---> 右子树 ---> 根结点
- 层次遍历(BFS):只需按层次遍历即可
举例
二叉树数据格式
{ "val": 5, "left": { "val": 3, "left": { "val": 2, "left": { "val": 1, "left": null, "right": null }, "right": null }, "right": { "val": 4, "left": null, "right": null } }, "right": { "val": 8, "left": { "val": 6, "left": null, "right": null }, "right": { "val": 9, "left": null, "right": null } } }
二叉树展示
- 前序遍历: 5, 3, 2, 1, 4, 8, 6, 9
- 中序遍历: 1, 2, 3, 4, 5, 6, 8, 9
- 后序遍历: 1, 2, 4, 3, 6, 9, 8, 5
- 层次遍历(BFS): 5, 3, 8, 2, 4, 6, 9, 1
几种遍历具体实现
前序遍历
**遍历顺序: ** 根结点 ---> 左子树 ---> 右子树
function preTraverse(root) {
if (root) {
console.log(root.val);
preTraverse(root.left);
preTraverse(root.right);
}
}
中序遍历
**遍历顺序: ** 左子树---> 根结点 ---> 右子树
function midTraverse(root) {
if (root) {
midTraverse(root.left);
console.log(root.val);
midTraverse(root.right);
}
}
后序遍历
**遍历顺序: ** 左子树 ---> 右子树 ---> 根结点
function endTraverse(root) {
if (root) {
endTraverse(root.left);
endTraverse(root.right);
console.log(root.val);
}
}
层次遍历(BFS)
**遍历顺序: ** 自顶而下,层级遍历
function BFS(root) {
if(!root) return []
const res = [];
const queue = [root];
while (queue.length) {
const len = queue.length;
for (let i = 0; i < len; i++) {
const node = queue.shift();
res.push(node.val)
if (node.left) queue.push(node.left);
if (node.right) queue.push(node.right);
}
}
return res
}