JavaScript数据结构与算法之二叉树实现查找最小值、最大值、给定值算法示例

JavaScript数据结构与算法之二叉树实现查找最小值、最大值、给定值算法示例

二叉树简介

二叉树是一种非常重要的数据结构,它可以给我们提供高效的算法实现,如查找、插入、删除等。二叉树是由节点(node)构成的,每个节点最多只有两个子节点。在 JavaScript 中,我们可以用对象的形式来表示一个二叉树节点,如下:

class Node {
  constructor(value) {
    this.value = value
    this.left = null
    this.right = null
  }
}

上面的代码中,我们定义了一个 Node 类,它有一个 value 属性,以及 left 和 right 两个子节点。

查找最小值、最大值、给定值

在二叉搜索树(BST)中,每个节点的值都大于其左子树中的任意节点的值,而小于其右子树中的任意节点的值。因此,在 BST 中,查找最小值时只需要访问树的最左侧节点即可,查找最大值时只需要访问树的最右侧节点即可。

以下是查找最小值、最大值、给定值的代码实现:

class BinarySearchTree {
  constructor() {
    this.root = null
  }

  // 插入节点
  insert(value) {
    let node = new Node(value)

    if (this.root === null) {
      this.root = node
    } else {
      this._insert(node, this.root)
    }
  }

  _insert(node, current) {
    if (node.value < current.value) {
      if (current.left === null) {
        current.left = node
      } else {
        this._insert(node, current.left)
      }
    } else {
      if (current.right === null) {
        current.right = node
      } else {
        this._insert(node, current.right)
      }
    }
  }

  // 查找最小值
  findMin() {
    if (this.root === null) {
      return null
    }

    let current = this.root
    while (current.left !== null) {
      current = current.left
    }

    return current.value
  }

  // 查找最大值
  findMax() {
    if (this.root === null) {
      return null
    }

    let current = this.root
    while (current.right !== null) {
      current = current.right
    }

    return current.value
  }

  // 查找给定值
  find(value) {
    if (this.root === null) {
      return false
    }

    let current = this.root
    while (current !== null) {
      if (value === current.value) {
        return true
      } else if (value < current.value) {
        current = current.left
      } else {
        current = current.right
      }
    }

    return false
  }
}

示例说明

示例 1:查找最小值和最大值

以下为示例序列,我们将其构建成一颗二叉搜索树。

          10
       /      \
      6        14
     / \      /  \
    4   8   12    16

查找最小值:

let bst = new BinarySearchTree()
bst.insert(10)
bst.insert(6)
bst.insert(14)
bst.insert(4)
bst.insert(8)
bst.insert(12)
bst.insert(16)

console.log(bst.findMin()) // 4

查找最大值:

let bst = new BinarySearchTree()
bst.insert(10)
bst.insert(6)
bst.insert(14)
bst.insert(4)
bst.insert(8)
bst.insert(12)
bst.insert(16)

console.log(bst.findMax()) // 16

示例 2:查找给定值

以下为示例序列,我们将其构建成一颗二叉搜索树。

          10
       /      \
      6        14
     / \      /  \
    4   8   12    16

查找给定值 12:

let bst = new BinarySearchTree()
bst.insert(10)
bst.insert(6)
bst.insert(14)
bst.insert(4)
bst.insert(8)
bst.insert(12)
bst.insert(16)

console.log(bst.find(12)) // true

以上即是关于二叉树实现查找最小值、最大值、给定值算法的完整攻略。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:JavaScript数据结构与算法之二叉树实现查找最小值、最大值、给定值算法示例 - Python技术站

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

相关文章

  • Node.js对MySQL数据库的增删改查实战记录

    Node.js对MySQL数据库的增删改查实战记录 前言 在使用Node.js开发Web应用时,使用MySQL数据库进行数据存储是非常普遍的实践。本文将为大家介绍如何使用Node.js对MySQL数据库进行增删改查的实战记录,希望对大家有所帮助。 准备工作 安装Node.js和MySQL数据库,并保证两者配置正确; 安装MySQL Node.js驱动:npm…

    node js 2023年6月8日
    00
  • Go语言集成开发环境IDE详细安装教程

    Go语言集成开发环境IDE详细安装教程 简介 本教程将向大家介绍如何安装Go语言的集成开发环境,包括使用Visual Studio Code和GoLand两款IDE。 Visual Studio Code安装 下载并安装Visual Studio Code。 打开Visual Studio Code,按Ctrl+Shift+X打开扩展面板。 搜索Go,安装G…

    node js 2023年6月8日
    00
  • 举例讲解Node.js中的Writable对象

    下面是“举例讲解Node.js中的Writable对象”的攻略: 什么是Writable对象 在Node.js中,Writable对象是stream(流)的一种,用于将数据写入到目标中。我们可以通过Writable对象向文件、HTTP响应、网络套接字等目标写入数据。 构造函数 在Node.js中,我们可以使用以下方法创建Writable对象: const {…

    node js 2023年6月8日
    00
  • js自定义回调函数

    下面是关于JS自定义回调函数的详细讲解攻略。 什么是回调函数? 回调函数是一种高级的JavaScript技术。回调函数是一种特殊类型的函数,它有两个特性: 回调函数作为参数传递给另一个函数。 回调函数在另一个函数完成操作后被调用。 回调函数使我们可以将代码分解为可重用的模块,这些模块可以在不同的上下文中调用。 JS自定义回调函数的写法 自定义回调函数是一种可…

    node js 2023年6月8日
    00
  • node.js中的fs.renameSync方法使用说明

    Node.js中的fs.renameSync方法使用说明 fs.renameSync(oldPath, newPath)方法用于对指定文件或目录进行重命名操作。本攻略将详细讲解fs.renameSync方法的使用方法。 方法参数 fs.renameSync()方法接受两个字符串类型的参数,分别是原文件/目录的路径(oldPath)和新文件/目录的路径(new…

    node js 2023年6月8日
    00
  • 基于Node.js的强大爬虫 能直接发布抓取的文章哦

    让我来详细讲解基于Node.js的强大爬虫并能直接发布抓取到的文章的攻略。 什么是Node.js爬虫? Node.js是一种用于构建高效、可伸缩性网络应用的工具。如果您需要从另一家网站上批量获取数据,Node.js爬虫就可以派上用场。 Node.js爬虫可以从网站上批量获取数据,然后将其处理并显示在您的网站上。 如何编写Node.js爬虫? 编写Node爬虫…

    node js 2023年6月8日
    00
  • mongoose更新对象的两种方法示例比较

    Mongoose是一个为了在Node.js中与MongoDB进行交互而设计的对象模型工具。在实际应用中,我们常常需要更新对象来满足业务需求。本文将介绍Mongoose中更新对象的两种方法并进行比较。 一、Mongoose更新对象的两种方法 Mongoose更新对象的两种方法分别是:Model.updateOne()和Model.findByIdAndUpda…

    node js 2023年6月8日
    00
  • Node.js中的不安全跳转如何防御详解

    下面是详细的“Node.js中的不安全跳转如何防御详解”攻略: 什么是不安全跳转攻击? 在Node.js中,如果一个应用程序使用了HTTP 307重定向并在此过程中未检查URL参数,攻击者就可以利用该应用程序进行恶意跳转到指定的网站。出于各种原因,这些恶意跳转通常都是“不安全”的,并可能导致以下问题: 用户被导航到一个钓鱼网站,诈骗个人信息; 用户被导航到安…

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