js构建二叉搜索树

简介: js构建二叉搜索树
// 代码构建二叉搜索树
// 二叉搜索树的作用, 对于数据量大的数据,需要找到该数据在不在里面,使用二叉树循环的次数减少,节约性能
let bigNumber = [];
for (let i = 0; i < 1000000; i++){
    bigNumber.push(Math.floor(Math.random() * 1000000))
}
// 判断一个值在不在一个数组里面,
// 代码构建二叉搜索树
function DoubleTreeNode (value){
    this.value = value;
    this.left = null;
    this.right = null;
}
/**
 * 添加一个二叉搜索树的节点
 * @param root
 * @param num
 * @returns {null|boolean}
 */
function addNode(root, num){
    // 如果当前的节点为空,直接返回
    if (!root || root.value === null) return null;
    // 节点的值相同的时候, 返回
    if (root.value === num) return true;
    // 输入的值比节点的值大,放在二叉搜索树的右边
    if (root.value < num){
        // 二叉搜索树的右边值为空,赋值,否在递归
        if (root.right === null) root.right= new DoubleTreeNode(num);
        else addNode(root.right, num)
    }else {
        if (root.left === null) root.left = new DoubleTreeNode(num);
        else addNode(root.left, num);
    }
}
/**
 * 构建二叉搜索树
 * @param list
 * @returns {null|DoubleTreeNode}
 */
function generateDoubleSearchTree(list){
    if (!list || list.length === 0) return null;
    let root = new DoubleTreeNode(list[0]);
    for (let i = 1, l = list.length; i < l; i ++){
        addNode(root, list[i])
    }
    return root;
}
// console.log(bigNumber)
let searchTree = generateDoubleSearchTree(bigNumber);
// 遍历二叉搜索树
/**
 * 通过二叉搜索树来找值是否存在
 * @param treeList
 * @param target
 * @returns {boolean}
 */
let num = 1;
function searchByDoubleTree(treeList, target){
    if (!treeList || treeList.value === null || !target) return false;
    num += 1;
    if (treeList.value === target) return true;
    if (treeList.value > target) return searchByDoubleTree(treeList.left, target);
    else return searchByDoubleTree(treeList.right, target);
}
let num2 = 1;
function searchByArr(list, target){
    for (let i = 0, l = list.length; i < l; i ++){
        num2+=1;
        if (list[i] === target){
            return true;
        }
    }
    return false;
}
console.log(searchByArr(bigNumber, 100000), num2)
console.log(searchByDoubleTree(searchTree, 100000), num);


遍历的次数如下: 从性能的角度来说,减少了遍历次数


20200915213958503.png

相关文章
|
5月前
|
JavaScript 前端开发 物联网
JavaScript:构建动态世界的引擎
JavaScript:构建动态世界的引擎
|
5月前
|
前端开发 JavaScript 开发者
JavaScript:构建动态网络的引擎
JavaScript:构建动态网络的引擎
|
5月前
|
前端开发 JavaScript 开发者
JavaScript:构建动态Web的核心力量
JavaScript:构建动态Web的核心力量
|
9月前
|
前端开发 算法 API
构建高性能图像处理Web应用:Next.js与TailwindCSS实践
本文分享了构建在线图像黑白转换工具的技术实践,涵盖技术栈选择、架构设计与性能优化。项目采用Next.js提供优秀的SSR性能和SEO支持,TailwindCSS加速UI开发,WebAssembly实现高性能图像处理算法。通过渐进式处理、WebWorker隔离及内存管理等策略,解决大图像处理性能瓶颈,并确保跨浏览器兼容性和移动设备优化。实际应用案例展示了其即时处理、高质量输出和客户端隐私保护等特点。未来计划引入WebGPU加速、AI增强等功能,进一步提升用户体验。此技术栈为Web图像处理应用提供了高效可行的解决方案。
|
10月前
|
前端开发 搜索推荐 JavaScript
如何通过DIY.JS快速构建出一个DIY手机壳、T恤的应用?
DIY.JS 是一款基于原生 Canvas 的业务级图形库,专注于商品定制的图形交互功能,帮助开发者轻松实现个性化设计。适用于 T 恤、手机壳等多种商品场景。它自带丰富功能,无需从零构建,快速集成到项目中。通过创建舞台、添加模型、定义 DIY 区域和添加素材四个步骤即可完成基础用法。支持在线演示体验,文档详细,易上手。
502 57
|
Web App开发 JavaScript 前端开发
深入浅出Node.js:从零开始构建后端服务
【10月更文挑战第42天】在数字时代的浪潮中,掌握一门后端技术对于开发者来说至关重要。Node.js,作为一种基于Chrome V8引擎的JavaScript运行环境,允许开发者使用JavaScript编写服务器端代码,极大地拓宽了前端开发者的技能边界。本文将从Node.js的基础概念讲起,逐步引导读者理解其事件驱动、非阻塞I/O模型的核心原理,并指导如何在实战中应用这些知识构建高效、可扩展的后端服务。通过深入浅出的方式,我们将一起探索Node.js的魅力和潜力,解锁更多可能。
|
9月前
|
存储 监控 算法
公司内部网络监控中的二叉搜索树算法:基于 Node.js 的实时设备状态管理
在数字化办公生态系统中,公司内部网络监控已成为企业信息安全管理体系的核心构成要素。随着局域网内终端设备数量呈指数级增长,实现设备状态的实时追踪与异常节点的快速定位,已成为亟待解决的关键技术难题。传统线性数据结构在处理动态更新的设备信息时,存在检索效率低下的固有缺陷;而树形数据结构因其天然的分层特性与高效的检索机制,逐渐成为网络监控领域的研究热点。本文以二叉搜索树(Binary Search Tree, BST)作为研究对象,系统探讨其在公司内部网络监控场景中的应用机制,并基于 Node.js 平台构建一套具备实时更新与快速查询功能的设备状态管理算法框架。
329 3
|
10月前
|
前端开发 JavaScript NoSQL
使用 Node.js、Express 和 React 构建强大的 API
本文详细介绍如何使用 Node.js、Express 和 React 构建强大且动态的 API。从开发环境搭建到集成 React 前端,再到利用 APIPost 高效测试 API,适合各水平开发者。内容涵盖 Node.js 运行时、Express 框架与 React 库的基础知识及协同工作方式,还涉及数据库连接和前后端数据交互。通过实际代码示例,助你快速上手并优化应用性能。
|
11月前
|
JavaScript 算法 前端开发
JS数组操作方法全景图,全网最全构建完整知识网络!js数组操作方法全集(实现筛选转换、随机排序洗牌算法、复杂数据处理统计等情景详解,附大量源码和易错点解析)
这些方法提供了对数组的全面操作,包括搜索、遍历、转换和聚合等。通过分为原地操作方法、非原地操作方法和其他方法便于您理解和记忆,并熟悉他们各自的使用方法与使用范围。详细的案例与进阶使用,方便您理解数组操作的底层原理。链式调用的几个案例,让您玩转数组操作。 只有锻炼思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~
|
JSON 缓存 JavaScript
深入浅出:使用Node.js构建RESTful API
在这个数字时代,API已成为软件开发的基石之一。本文旨在引导初学者通过Node.js和Express框架快速搭建一个功能完备的RESTful API。我们将从零开始,逐步深入,不仅涉及代码编写,还包括设计原则、最佳实践及调试技巧。无论你是初探后端开发,还是希望扩展你的技术栈,这篇文章都将是你的理想指南。

热门文章

最新文章