返回
二叉树遍历:遍历方式图解算法步骤及JS代码实现
前端
2024-02-02 14:53:27
深度优先遍历
深度优先遍历是一种沿着树的深度一层一层往下遍历的遍历方法。它有三种不同的实现方式:先序遍历、中序遍历和后序遍历。
1. 先序遍历:
先序遍历的算法步骤如下:
- 访问当前结点。
- 遍历左子树。
- 遍历右子树。
先序遍历的图解如下:
[图片:先序遍历]
先序遍历的JavaScript代码实现如下:
function preorderTraversal(root) {
if (root === null) {
return;
}
console.log(root.data);
preorderTraversal(root.left);
preorderTraversal(root.right);
}
2. 中序遍历:
中序遍历的算法步骤如下:
- 遍历左子树。
- 访问当前结点。
- 遍历右子树。
中序遍历的图解如下:
[图片:中序遍历]
中序遍历的JavaScript代码实现如下:
function inorderTraversal(root) {
if (root === null) {
return;
}
inorderTraversal(root.left);
console.log(root.data);
inorderTraversal(root.right);
}
3. 后序遍历:
后序遍历的算法步骤如下:
- 遍历左子树。
- 遍历右子树。
- 访问当前结点。
后序遍历的图解如下:
[图片:后序遍历]
后序遍历的JavaScript代码实现如下:
function postorderTraversal(root) {
if (root === null) {
return;
}
postorderTraversal(root.left);
postorderTraversal(root.right);
console.log(root.data);
}
广度优先遍历
广度优先遍历是一种沿着树的宽度一层一层往下遍历的遍历方法。广度优先遍历也称层次遍历,每层结点依次从左到右排列。
广度优先遍历的算法步骤如下:
- 把根结点加入到队列中。
- 当队列不为空时,依次从队列中取出结点,并访问该结点。
- 把该结点的左右子树加入到队列中。
广度优先遍历的图解如下:
[图片:广度优先遍历]
广度优先遍历的JavaScript代码实现如下:
function levelOrderTraversal(root) {
if (root === null) {
return;
}
const queue = [];
queue.push(root);
while (queue.length > 0) {
const node = queue.shift();
console.log(node.data);
if (node.left !== null) {
queue.push(node.left);
}
if (node.right !== null) {
queue.push(node.right);
}
}
}
总结
二叉树遍历是遍历二叉树中所有结点的一种算法。它有两种不同的实现方式:深度优先遍历和广度优先遍历。深度优先遍历包括先序遍历、中序遍历和后序遍历,而广度优先遍历也称为层次遍历。这四种遍历方式各有其优缺点,具体使用哪种方式取决于具体应用场景。