面向JavaScript入门初学者的二叉搜索树算法教程

yizhihongxing

下面是“面向JavaScript入门初学者的二叉搜索树算法教程”的完整攻略:

什么是二叉搜索树

二叉搜索树(Binary Search Tree,简称BST)是一种基于二分查找的数据结构,它满足下列性质:

  1. 左子树上所有结点的值均小于它的根结点的值;
  2. 右子树上所有结点的值均大于它的根结点的值;
  3. 左右子树也分别为BST;
  4. 没有重复的结点。

二叉搜索树的插入操作

二叉搜索树的插入操作分为两步:

  1. 在树中找到一个结点 p,使得新结点 n 的值要么等于 p 的值(即插入的结点值已经在树中已经存在),要么可以插入到 p 的左子树或者右子树中;
  2. 插入结点 n。

以下是JavaScript的插入操作的代码实现:

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

class BST {
  constructor() {
    this.root = null;
  }

  insert(val) {
    if (!this.root) {
      this.root = new TreeNode(val);
      return;
    }

    let curr = this.root;
    while (true) {
      if (val < curr.val) {
        if (!curr.left) {
          curr.left = new TreeNode(val);
          break;
        }
        curr = curr.left;
      } else if (val > curr.val) {
        if (!curr.right) {
          curr.right = new TreeNode(val);
          break;
        }
        curr = curr.right;
      } else {
        break; // val 已经存在于树中
      }
    }
  }
}

二叉搜索树的查找操作

二叉搜索树的查找操作也很简单,从根结点开始沿着左右子树不断搜索,直到找到目标结点或者空结点。

以下是JavaScript实现的查找操作代码:

class BST {
  // ...

  find(val) {
    let curr = this.root;
    while (curr) {
      if (val < curr.val) {
        curr = curr.left;
      } else if (val > curr.val) {
        curr = curr.right;
      } else {
        return curr;
      }
    }
    return null;
  }
}

示例说明

示例一:插入操作

假设我们要向一颗空的二叉搜索树中插入以下结点:[5, 4, 3, 1, 7, 6, 10, 8]。将这些结点插入树中后,我们可以通过中序遍历来验证这颗树是不是一颗BST。

const bst = new BST();
[5, 4, 3, 1, 7, 6, 10, 8].forEach(num => bst.insert(num));
console.log(bst);

输出结果:

BST {
  root: TreeNode {
    val: 5,
    left: TreeNode {
      val: 4,
      left: TreeNode { val: 3, left: TreeNode { val: 1, left: null, right: null }, right: null },
      right: null
    },
    right: TreeNode {
      val: 7,
      left: TreeNode { val: 6, left: null, right: null },
      right: TreeNode { val: 10, left: TreeNode { val: 8, left: null, right: null }, right: null }
    }
  }
}

中序遍历结果:[1, 3, 4, 5, 6, 7, 8, 10],符合BST的性质。

示例二:查找操作

假设我们要查找上面示例一中二叉搜索树中值为6的结点。

const node = bst.find(6);
console.log(node.val); // 6

输出结果:

6

我们成功找到了值为6的结点并返回了它的值。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:面向JavaScript入门初学者的二叉搜索树算法教程 - Python技术站

(0)
上一篇 2023年6月8日
下一篇 2023年6月8日

相关文章

  • node.js爬虫框架node-crawler初体验

    下面是对“node.js爬虫框架node-crawler初体验”的详细讲解。 什么是node.js爬虫框架node-crawler? node-crawler是一个基于node.js的爬虫框架,它的特点是能够像jQuery一样,通过选择器选择页面的元素进行数据抓取。使用node-crawler可以轻松地构建一个爬虫应用程序,提取特定网站的数据内容,适用于各种…

    node js 2023年6月8日
    00
  • 详解基于node.js的脚手架工具开发经历

    详解基于node.js的脚手架工具开发经历 简介 脚手架工具,是一种常见的自动化开发工具,可以在快速启动和搭建项目的过程中,提高开发效率。本文将详细讲解使用node.js开发脚手架工具的过程,并提供两个示例说明。 脚手架工具开发步骤 步骤一:初始化工程 使用npm init命令创建一个新的node.js工程,并编写package.json文件。 npm in…

    node js 2023年6月8日
    00
  • Node.js API详解之 readline模块用法详解

    Node.js API详解之 readline模块用法详解 简介 readline模块是Node.js内置的标准输入输出的接口,提供了纯文本模式的读取和处理。使用readline模块可以实现终端命令行与程序之间的交互,如输入、查询、修改数据等。本文将详细讲解readline模块的用法,包括基本的读取和处理、逐行读取文件等。 安装和引入 由于readline模…

    node js 2023年6月8日
    00
  • npm ERR! code 128的错误问题解决方法

    下面是“npm ERR! code 128的错误问题解决方法”的完整攻略。 问题描述 在使用npm安装/更新模块时,有时会遇到如下错误: npm ERR! code 128 npm ERR! Command failed: git clone –depth=1 -q https://github.com/xxx/xxx.git /Users/xxx/.np…

    node js 2023年6月8日
    00
  • 用C/C++来实现 Node.js 的模块(二)

    使用C++编写Node.js模块时,我们需要用到Node.js提供的C++ API,来实现对Node.js的各种操作。这里我们主要分为以下几个步骤: 1. 准备 首先,我们需要在本地安装Node.js环境,并且确定我们需要使用的Node.js版本。就像我们在Node.js中使用npm包管理工具一样,我们需要在C++模块中使用node-gyp工具来构建和编译我…

    node js 2023年6月8日
    00
  • Node.js assert断言原理与用法分析

    Node.js Assert断言原理与用法分析 什么是断言? 断言是一种在运行时检测程序是否有误的方法。在编写测试程序时,测试程序会在特定条件下断言程序行为是否合乎预期。如果行为不如预期,则断言会抛出异常来指示错误。断言一般用于测试程序的健壮性以及程序的正确性。 Node.js assert模块 在Node.js中,可以使用内置的assert模块来实现断言。…

    node js 2023年6月8日
    00
  • 浅谈Webpack是如何打包CommonJS的

    Webpack是一个JavaScript应用程序的打包工具,它能够把应用程序的多个模块打包成单一的JS文件。而CommonJS是一种模块化规范,可用于客户端和服务器端JavaScript环境。 在这里,我们详细讲解Webpack打包CommonJS模块的过程,以下是攻略: 1. 安装Webpack和CommonJS模块 在开始使用Webpack打包Commo…

    node js 2023年6月8日
    00
  • 新入门node.js必须要知道的概念(必看篇)

    下面来详细讲解“新入门node.js必须要知道的概念(必看篇)”的攻略。 标题 1. Node.js是什么 Node.js是由Ryan Dahl于2009年开发,基于Chrome V8引擎的JavaScript运行环境,使得JavaScript可以脱离浏览器运行在服务器端,提高了服务器JavaScript的开发效率,同时具备异步、事件驱动等特点,适合编写高并…

    node js 2023年6月8日
    00
合作推广
合作推广
分享本页
返回顶部