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日

相关文章

  • javascript克隆对象深度介绍

    JavaScript克隆对象深度介绍 在 JavaScript 中,进行对象的克隆操作是非常常见的需求,而对象克隆的深度也是我们需要考虑的一个问题。本篇攻略将会详细介绍 JavaScript 中对象克隆的深度问题。 什么是 JavaScript 对象克隆 JavaScript 中的对象克隆(Object Clone),即用一个新变量复制出一份与原变量内容完全…

    JavaScript 2023年5月27日
    00
  • 使用bootstrapValidator插件进行动态添加表单元素并校验

    让我来为您详细讲解如何使用bootstrapValidator插件进行动态添加表单元素并校验。 1、bootstrapValidator简介 bootstrapValidator是一个基于Bootstrap的优秀表单验证插件,支持表单的实时验证和AJAX提交,提供多种验证方式,例如:必填、长度、邮箱、手机、网址等。 2、动态添加表单元素 当我们需要动态地添加…

    JavaScript 2023年5月19日
    00
  • JavaScript 设计模式学习 Singleton

    对于“JavaScript 设计模式学习 Singleton”的完整攻略,可以分为以下步骤: 1. 了解 Singleton 模式的定义与原理 Singleton 模式是一种创建型设计模式,它确保某个类只有一个实例,并提供一个全局访问点。 Singleton 模式主要包含三个要素:私有化构造函数、私有化静态属性和一个提供全局访问的静态方法。 在 JavaSc…

    JavaScript 2023年6月10日
    00
  • JavaScript Array.flat()函数用法解析

    JavaScript Array.flat()函数用法解析 Array.flat()是JavaScript中一个新的数组API,用于将嵌套数组“展平”,即从多维数组变成一维数组。本文将详细讲解Array.flat()函数的用法。 语法 let newArray = arr.flat(depth) arr:被展平的原数组。 depth(可选):表示展平的深度,…

    JavaScript 2023年5月27日
    00
  • javascript数组操作(创建、元素删除、数组的拷贝)

    下面我来给你讲解一下 JavaScript 数组操作(创建、元素删除、数组的拷贝)的完整攻略。 创建数组 数组是 JavaScript 中的一种特殊的数据类型,用逗号分隔的多个值,可以使用数组字面量语法创建数组,也可以使用 Array 构造函数来创建数组。 数组字面量语法创建数组 可以使用方括号 [] 创建一个空数组,并用逗号分隔元素。例如: let arr…

    JavaScript 2023年5月27日
    00
  • JavaScript入门初体验书写方式

    关于“JavaScript入门初体验书写方式”的攻略,我可以作如下的详细讲解: 1. 引入JavaScript 想要使用JavaScript,首先需要将JavaScript代码引入HTML文档中,可以用以下的方法: <script src="js/myScript.js"></script> 其中,src指定需要引…

    JavaScript 2023年5月18日
    00
  • JavaScript中的事件循环机制及其运行原理

    JavaScript中的事件循环机制及其运行原理 JavaScript是一种单线程语言,这意味着一次只能执行一个任务。但是,JavaScript中有许多异步操作(例如网络请求、定时器等)需要在后台执行而不会阻塞代码运行,这就是事件循环机制的作用。 事件循环机制的基本概念 事件循环是JavaScript的一个重要特性,它基于一个简单的原理:执行栈为空时,Jav…

    JavaScript 2023年6月11日
    00
  • Web数据存储浅析 Cookie、UserData、SessionStorage、WebSqlDatabase

    Web数据存储浅析 Web数据存储是前端开发中非常重要的一环,主要目的是将数据保存在浏览器端,以便在不同的页面或刷新后依然可以访问到同样的数据。常见的Web数据存储方式有Cookie、UserData、SessionStorage以及WebSqlDatabase。下面将对它们进行一一分析。 Cookie Cookie是浏览器最常用的一种数据存储方式。它可以在…

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