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日

相关文章

  • Vue路由History模式分析

    Vue路由History模式分析 Vue Router 是 Vue 的官方路由管理器。它和 Vue.js 的核心深度集成,让构建单页面应用变得易如反掌。Vue Router 可以让我们通过前端路由来实现页面之间的切换和跳转,它的 History 模式一般用于生产环境并且需要后端支持。 History 模式 Vue Router 根据浏览器的不同,支持两种路由…

    node js 2023年6月8日
    00
  • 使用vue-cli初始化项目时运行‘npm run dev’报错及解决

    当使用vue-cli来初始化项目时,执行npm run dev命令时有可能出现各种类型的错误。这些错误可能会包括npm包的依赖关系、配置问题、端口占用等。在本文中,我们将介绍如何识别并解决其中的一些常见错误。 错误1:The System Cannot Find the Path Specified 这个错误通常意味着你没有正确设置项目的路径。例如,当你在W…

    node js 2023年6月8日
    00
  • 如何在node的express中使用socket.io

    想要在Node的Express中使用Socket.io,需要遵循以下步骤: 安装socket.io和express模块: npm install –save socket.io express 启用服务器和Socket.io: const express = require(‘express’); const http = require(‘http’);…

    node js 2023年6月8日
    00
  • 利用Node.js检测端口是否被占用的方法

    当我们要在Node.js中搭建服务时,常常会遇到端口被占用的问题,比如在调试时想要使用某个端口,但是发现该端口已被占用,这时我们就需要知道如何检测端口是否被占用。下面我将给出一个检测端口是否被占用的方法的攻略。 方法一:利用net模块检测 Node.js的内置模块net提供了一个API,可以用来检测端口是否被占用,具体代码如下所示: const net = …

    node js 2023年6月8日
    00
  • 详解如何使用Node.js实现热重载页面

    下面就详细讲解如何使用Node.js实现热重载页面的完整攻略。 概述 热重载是指在开发过程中,当代码发生改变时,应用程序会自动重新加载并更新代码,而无需手动重启应用程序。 在 Node.js 中,可以通过监视文件变化来实现热重载。下面是使用 Node.js 实现热重载的步骤。 步骤 安装 nodemon。 nodemon 是一个监视 Node.js 应用程序…

    node js 2023年6月8日
    00
  • NodeJs 实现简单WebSocket即时通讯的示例代码

    下面我将详细介绍如何使用Node.js实现简单的WebSocket即时通讯,包括以下步骤: 步骤一:创建WebSocket服务器 首先,我们需要使用Node.js创建一个WebSocket服务器,代码如下: const WebSocket = require(‘ws’); const server = new WebSocket.Server({ port:…

    node js 2023年6月8日
    00
  • 在阿里云 (aliyun) 服务器上搭建Ruby On Rails环境

    下面给出阿里云服务器上搭建Ruby On Rails环境的完整攻略: 1. 登录阿里云服务器 首先,开启控制台登录阿里云服务器。 2. 安装必要依赖 在终端中执行以下命令: sudo apt-get update sudo apt-get install git-core curl zlib1g-dev build-essential libssl-dev …

    node js 2023年6月9日
    00
  • 快速掌握Node.js事件驱动模型

    快速掌握Node.js事件驱动模型攻略 Node.js采用事件驱动模型(Event-Driven Model),这种模型非常适合处理高并发的I/O密集型应用程序。在Node.js中,我们可以利用EventEmitter来实现事件的发布和订阅,从而实现全局的事件监听和响应。本篇攻略将介绍Node.js事件驱动模型的详细说明以及示例演示。 Node.js事件驱动…

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