JavaScript实现二叉树的先序、中序及后序遍历方法详解

JavaScript实现二叉树的先序、中序及后序遍历方法详解

一、二叉树的定义

二叉树是一个每个节点最多有两个子树的树结构,通常分为左子树、右子树。二叉树有多种遍历方式,包括先序遍历、中序遍历和后序遍历。

其中,

  • 先序遍历:按照“根结点-左子树-右子树”的方式遍历二叉树;
  • 中序遍历:按照“左子树-根结点-右子树”的方式遍历二叉树;
  • 后序遍历:按照“左子树-右子树-根结点”的方式遍历二叉树。

在 JavaScript 中,我们可以用基本的数据结构来表示一棵二叉树。二叉树节点的结构通常包含一个值、左子树和右子树三个属性。

下面是一个基本的二叉树节点结构的 JavaScript 代码表示:

class TreeNode {
  constructor(val) {
    this.val = val;
    this.left = null;
    this.right = null;
  }
}

下面是一个生成二叉树的函数,通过数组 inputArr 生成一棵二叉树:

const buildBinaryTree = (inputArr) => {
  const root = new TreeNode(inputArr[0]);
  const queue = [root];
  let index = 1;

  while (index < inputArr.length) {
    const currNode = queue.shift();

    if (inputArr[index] !== null) {
      currNode.left = new TreeNode(inputArr[index]);
      queue.push(currNode.left);
    }

    index++;

    if (index >= inputArr.length) break;

    if (inputArr[index] !== null) {
      currNode.right = new TreeNode(inputArr[index]);
      queue.push(currNode.right);
    }

    index++;
  }

  return root;
};

二、先序遍历实现

先序遍历按照“根结点-左子树-右子树”的方式遍历二叉树。步骤如下:

  1. 如果节点为空,则返回
  2. 访问根节点
  3. 遍历左子树
  4. 遍历右子树

以下是先序遍历的 JavaScript 实现:

const preorderTraversal = (root, result = []) => {
  if (!root) return result;

  result.push(root.val);

  root.left && preorderTraversal(root.left, result);
  root.right && preorderTraversal(root.right, result);

  return result;
};

以下是一个简单的示例:

const inputArr = [1, 2, 3, 4, 5, 6, 7];
const root = buildBinaryTree(inputArr);
console.log(preorderTraversal(root)); // [1, 2, 4, 5, 3, 6, 7]

三、中序遍历实现

中序遍历按照“左子树-根结点-右子树”的方式遍历二叉树。步骤如下:

  1. 如果节点为空,则返回
  2. 遍历左子树
  3. 访问根节点
  4. 遍历右子树

以下是中序遍历的 JavaScript 实现:

const inorderTraversal = (root, result = []) => {
  if (!root) return result;

  root.left && inorderTraversal(root.left, result);
  result.push(root.val);
  root.right && inorderTraversal(root.right, result);

  return result;
};

以下是一个简单的示例:

const inputArr = [1, 2, 3, 4, 5, 6, 7];
const root = buildBinaryTree(inputArr);
console.log(inorderTraversal(root)); // [4, 2, 5, 1, 6, 3, 7]

四、后序遍历实现

后序遍历按照“左子树-右子树-根结点”的方式遍历二叉树。步骤如下:

  1. 如果节点为空,则返回
  2. 遍历左子树
  3. 遍历右子树
  4. 访问根节点

以下是后序遍历的 JavaScript 实现:

const postorderTraversal = (root, result = []) => {
  if (!root) return result;

  root.left && postorderTraversal(root.left, result);
  root.right && postorderTraversal(root.right, result);
  result.push(root.val);

  return result;
};

以下是一个简单的示例:

const inputArr = [1, 2, 3, 4, 5, 6, 7];
const root = buildBinaryTree(inputArr);
console.log(postorderTraversal(root)); // [4, 5, 2, 6, 7, 3, 1]

以上是 JavaScript 实现二叉树的先序、中序及后序遍历方法的详细攻略。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:JavaScript实现二叉树的先序、中序及后序遍历方法详解 - Python技术站

(0)
上一篇 2023年5月28日
下一篇 2023年5月28日

相关文章

  • asp javascript 实现关闭窗口时保存数据的办法

    下面是“asp javascript 实现关闭窗口时保存数据的办法”的完整攻略: 1. 使用 onbeforeunload 事件 onbeforeunload 事件可以在页面关闭之前触发,我们可以在这个事件中实现数据保存的逻辑。具体实现步骤如下: 在页面中添加 <body onbeforeunload=”return onBeforeUnloadHan…

    JavaScript 2023年6月11日
    00
  • 详解JavaScript 中的 replace 方法

    详解JavaScript 中的 replace 方法 什么是 replace 方法 在JavaScript中,replace方法属于字符串对象的方法,它被用于在字符串中用一个新的字符替换匹配的字符。replace方法有两种常用的用法:用正则表达式替换匹配部分和将一个字符串替换成另一个字符串。replace方法的语法如下: string.replace(sea…

    JavaScript 2023年5月28日
    00
  • 如何让页面在打开时自动刷新一次让图片全部显示

    首先,我们需要了解网页自动刷新的原理。网页的自动刷新可以通过设置HTTP响应头实现。HTTP响应头部分可以通过前端开发工具或后端框架来设置。最常用的设置自动刷新的HTTP响应头是Refresh和Location,下面分别介绍两种设置方法。 一、Refresh方式 Refresh方法通过设置HTTP响应头Refresh,来指定页面自动刷新的时间和路径。具体设置…

    JavaScript 2023年6月11日
    00
  • JavaScript 原型继承

    JavaScript 原型继承 JavaScript 原型继承是一种非常重要的概念,相较于传统的面向对象语言中的继承,JavaScript 通过原型继承来实现对象之间的属性和方法的共享,它是 JavaScript 中最为灵活的一种继承方式。 定义 JavaScript 中的每个对象(除了 null)都有一个原型对象,原型对象可以通过 Object.getPr…

    JavaScript 2023年6月10日
    00
  • JS正则表达式替换字符串replace()方法实例代码

    下面是关于JS正则表达式替换字符串replace()方法的详细攻略: 什么是JS正则表达式替换字符串replace()方法? 在JavaScript中,字符串replace() 方法可以将一个字符串中的指定内容替换成新的内容,这有很多应用场景。其中,JS正则表达式替换字符串replace()方法,可以让开发者使用正则表达式来进行替换操作,更加高效和灵活。 J…

    JavaScript 2023年5月28日
    00
  • 正则基础之 捕获组(capture group)

    正则基础之 捕获组(capture group) 介绍 在正则表达式中,捕获组是一个由括号包围的子表达式。在使用正则表达式匹配字符串时,可以通过捕获组从匹配到的字符串中提取想要的部分。 捕获组可以使用圆括号中的数字引用到,如果有多个捕获组,可以通过捕获组的序号来区分哪一个捕获组是被引用的。除了序号之外,也可以给捕获组设置名字,用于更清晰、方便的引用。 示例 …

    JavaScript 2023年6月10日
    00
  • JavaScript判断是否手机浏览器的五种方法

    下面我将给出“JavaScript判断是否手机浏览器的五种方法”的完整攻略,具体攻略如下: 方法一:根据userAgent判断 利用navigator.userAgent获取当前浏览器的userAgent字符串,判断是否包含移动设备的关键字,如“Android”、“iPhone”等。 const isMobile = () => { return /A…

    JavaScript 2023年6月11日
    00
  • JS获取农历日期具体实例

    下面就来讲解“JS获取农历日期具体实例”的完整攻略。 步骤1:引入农历计算代码 获取农历日期需要用到农历计算代码,这里主要介绍一个轻量级的农历计算库lunar-js,具体项目地址可查看GitHub。下载后可在页面上通过script标签引入。如下: <script type="text/javascript" src="lu…

    JavaScript 2023年5月27日
    00
合作推广
合作推广
分享本页
返回顶部