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

yizhihongxing

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日

相关文章

  • IDEA中配置运行node.js的完整过程

    下面是在IDEA中配置运行node.js的完整过程的详细攻略。 步骤一:安装Node.js插件 在开始配置Node.js的运行环境之前,我们需要先在IDEA中安装Node.js插件。具体操作步骤如下: 打开IDEA,进入“Settings”(Windows下位于File菜单下,Mac下位于IntelliJ IDEA菜单下)。 找到“Plugins”选项,点击…

    node js 2023年6月8日
    00
  • JS获取子节点、父节点和兄弟节点的方法实例总结

    下面我来详细讲解一下JS获取子节点、父节点和兄弟节点的方法实例总结。 1. 获取子节点 在JavaScript中,可以使用childNodes属性获取选定元素的子节点列表,该属性返回一个NodeList对象。NodeList对象类似于数组,但有些方法不同。要获取具体的子节点,可以使用索引值来获取。 示例1 <!DOCTYPE html> <…

    node js 2023年6月8日
    00
  • 详解如何用typescript开发koa2的二三事

    下面是如何用 TypeScript 开发 Koa2 应用的攻略: 简介 Koa2 是一个轻量级的 Node.js Web 框架,适用于开发可扩展的网络应用程序。它可以使用异步方法,在处理请求方式时能够提高并发能力。TypeScript 是一种 JavaScript 的超集,它能够编译成普通 JavaScript。这意味着我们可以使用 TypeScript 来…

    node js 2023年6月8日
    00
  • Centos7 安装Node.js10以上版本的方法步骤

    下面是关于“Centos7 安装Node.js10以上版本的方法步骤”的完整攻略。 安装 Node.js10 以上版本 在 CentOS7 上安装 Node.js 10 以及以上版本,可以采用以下步骤进行。 步骤 1:添加 Node.js 源 您需要添加适用于 CentOS 7 的 Node.js 源。下面是添加源的命令。 curl -sL https://…

    node js 2023年6月8日
    00
  • nodejs的安装使用与npm的介绍

    Node.js是一个能够在服务器端运行JavaScript的开放源代码,跨平台的运行环境。它是构建在Chromium的V8 JavaScript引擎上的。 安装Node.js 1. Windows环境下的安装 在Windows环境下,你可以直接在Node.js官网(https://nodejs.org/en/)下载Windows安装包,根据安装向导完成安装。…

    node js 2023年6月8日
    00
  • 详解关于Angular4 ng-zorro使用过程中遇到的问题

    关于Angular4 ng-zorro使用过程中遇到的问题的详解攻略 近年来,Angular已成为前端开发中备受欢迎的框架之一,并且随着ng-zorro组件库的出现,它变得更加容易实现样式统一。然而,ng-zorro也存在一些问题需要解决,本攻略将介绍如何应对Angular4 ng-zorro使用过程中遇到的问题。 问题1:ng-bootstrap组件无法正…

    node js 2023年6月8日
    00
  • node.js实现上传文件功能

    Node.js是一种基于JavaScript的后端开发语言,在实现上传文件功能时也是非常好用的。下面是基于Node.js实现上传文件功能的完整攻略: 1. 安装依赖 使用Node.js实现上传文件功能需要依赖于multiparty和fs模块。multiparty是一个用来解析multipart/form-data类型数据的模块,fs是Node.js内置的文件…

    node js 2023年6月7日
    00
  • 只有 20 行的 JavaScript 模板引擎实例详解

    20 行 JavaScript 模板引擎实例详解 概述 在前端开发中,模板引擎是一项必不可少的技术。本文将详细讲解使用 JavaScript 实现一个只有 20 行的模板引擎的过程。 实现 下面是 20 行 JavaScript 模板引擎的核心代码: function template(tpl, data) { return tpl.replace(/\{\…

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