当前位置:   article > 正文

前端面试题——二叉树遍历

前端面试题——二叉树遍历

前言

二叉树遍历在各种算法和数据结构问题中都有广泛的应用,如二叉搜索树、表达式的树形表示、堆的实现等。同时也是前端面试中的常客,掌握好二叉树遍历算法对于一名合格的前端工程师来说至关重要。

概念

二叉树遍历(Binary Tree Traversal)是指按照某种规则访问二叉树中所有节点的过程。由于二叉树是一个递归的数据结构,因此遍历操作通常也是递归进行的。

二叉树的遍历主要有四种方式:前序遍历(Pre-order Traversal)、中序遍历(In-order Traversal)、后序遍历(Post-order Traversal)和层次遍历(Level-order Traversal)。

代码原理

首先定义一个 TreeNode 类来表示二叉树的节点

  1. class TreeNode {
  2. constructor(val, left = null, right = null) {
  3. this.val = val; // 节点的值
  4. this.left = left; // 左子节点,默认为null
  5. this.right = right; // 右子节点,默认为null
  6. }
  7. }

前序遍历

定义遍历方法

  1. function preorderTraversal(root) {
  2. if (root === null) {
  3. return; // 如果节点为空,则直接返回
  4. }
  5. console.log(root.val); // 访问当前节点的值
  6. preorderTraversal(root.left); // 递归遍历左子树
  7. preorderTraversal(root.right); // 递归遍历右子树
  8. }

创建二叉树

  1. // 创建二叉树
  2. const root = new TreeNode(1);
  3. root.left = new TreeNode(2);
  4. root.right = new TreeNode(3);
  5. root.left.left = new TreeNode(4);
  6. root.left.right = new TreeNode(5);

调用方法执行遍历

  1. // 执行遍历
  2. console.log("前序遍历:");
  3. preorderTraversal(root);

中序遍历

定义遍历方法

  1. // 中序遍历
  2. function inorderTraversal(root) {
  3. if (root === null) {
  4. return;
  5. }
  6. inorderTraversal(root.left); // 遍历左子树
  7. console.log(root.val); // 访问根节点
  8. inorderTraversal(root.right); // 遍历右子树
  9. }

创建二叉树

  1. // 创建二叉树
  2. const root = new TreeNode(1);
  3. root.left = new TreeNode(2);
  4. root.right = new TreeNode(3);
  5. root.left.left = new TreeNode(4);
  6. root.left.right = new TreeNode(5);

调用方法执行遍历

  1. console.log("中序遍历:");
  2. inorderTraversal(root);

后序遍历

定义遍历方法

  1. // 后序遍历
  2. function postorderTraversal(root) {
  3. if (root === null) {
  4. return;
  5. }
  6. postorderTraversal(root.left); // 遍历左子树
  7. postorderTraversal(root.right); // 遍历右子树
  8. console.log(root.val); // 访问根节点
  9. }

创建二叉树

  1. // 创建二叉树
  2. const root = new TreeNode(1);
  3. root.left = new TreeNode(2);
  4. root.right = new TreeNode(3);
  5. root.left.left = new TreeNode(4);
  6. root.left.right = new TreeNode(5);

调用方法执行遍历

  1. console.log("后序遍历:");
  2. postorderTraversal(root);

层次遍历

定义遍历方法

  1. // 层次遍历(使用队列)
  2. function levelOrderTraversal(root) {
  3. if (root === null) {
  4. return;
  5. }
  6. const queue = [root]; // 初始化队列,将根节点入队
  7. while (queue.length > 0) {
  8. const node = queue.shift(); // 出队一个节点
  9. console.log(node.val); // 访问该节点
  10. if (node.left !== null) {
  11. queue.push(node.left); // 左子节点入队
  12. }
  13. if (node.right !== null) {
  14. queue.push(node.right); // 右子节点入队
  15. }
  16. }
  17. }

创建二叉树

  1. // 创建二叉树
  2. const root = new TreeNode(1);
  3. root.left = new TreeNode(2);
  4. root.right = new TreeNode(3);
  5. root.left.left = new TreeNode(4);
  6. root.left.right = new TreeNode(5);

调用方法执行遍历

  1. console.log("层次遍历:");
  2. levelOrderTraversal(root);

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/2023面试高手/article/detail/97507
推荐阅读
相关标签
  

闽ICP备14008679号