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

相关文章
|
2月前
|
前端开发 机器人 API
前端大模型入门(一):用 js+langchain 构建基于 LLM 的应用
本文介绍了大语言模型(LLM)的HTTP API流式调用机制及其在前端的实现方法。通过流式调用,服务器可以逐步发送生成的文本内容,前端则实时处理并展示这些数据块,从而提升用户体验和实时性。文章详细讲解了如何使用`fetch`发起流式请求、处理响应流数据、逐步更新界面、处理中断和错误,以及优化用户交互。流式调用特别适用于聊天机器人、搜索建议等应用场景,能够显著减少用户的等待时间,增强交互性。
556 2
|
29天前
|
Web App开发 JavaScript 前端开发
深入浅出Node.js:从零开始构建后端服务
【10月更文挑战第42天】在数字时代的浪潮中,掌握一门后端技术对于开发者来说至关重要。Node.js,作为一种基于Chrome V8引擎的JavaScript运行环境,允许开发者使用JavaScript编写服务器端代码,极大地拓宽了前端开发者的技能边界。本文将从Node.js的基础概念讲起,逐步引导读者理解其事件驱动、非阻塞I/O模型的核心原理,并指导如何在实战中应用这些知识构建高效、可扩展的后端服务。通过深入浅出的方式,我们将一起探索Node.js的魅力和潜力,解锁更多可能。
|
2月前
|
存储 JavaScript 前端开发
使用JavaScript构建动态交互式网页:从基础到实践
【10月更文挑战第12天】使用JavaScript构建动态交互式网页:从基础到实践
137 1
|
24天前
|
JSON 缓存 JavaScript
深入浅出:使用Node.js构建RESTful API
在这个数字时代,API已成为软件开发的基石之一。本文旨在引导初学者通过Node.js和Express框架快速搭建一个功能完备的RESTful API。我们将从零开始,逐步深入,不仅涉及代码编写,还包括设计原则、最佳实践及调试技巧。无论你是初探后端开发,还是希望扩展你的技术栈,这篇文章都将是你的理想指南。
|
17天前
|
JSON JavaScript 前端开发
深入浅出Node.js:从零开始构建RESTful API
在数字化时代的浪潮中,后端开发作为连接用户与数据的桥梁,扮演着至关重要的角色。本文将引导您步入Node.js的奇妙世界,通过实践操作,掌握如何使用这一强大的JavaScript运行时环境构建高效、可扩展的RESTful API。我们将一同探索Express框架的使用,学习如何设计API端点,处理数据请求,并实现身份验证机制,最终部署我们的成果到云服务器上。无论您是初学者还是有一定基础的开发者,这篇文章都将为您打开一扇通往后端开发深层知识的大门。
33 12
|
24天前
|
JavaScript NoSQL API
深入浅出Node.js:从零开始构建RESTful API
在数字化时代的浪潮中,后端开发如同一座灯塔,指引着数据的海洋。本文将带你航行在Node.js的海域,探索如何从一张白纸到完成一个功能完备的RESTful API。我们将一起学习如何搭建开发环境、设计API结构、处理数据请求与响应,以及实现数据库交互。准备好了吗?启航吧!
|
27天前
|
缓存 JavaScript 前端开发
JavaScript 与 DOM 交互的基础及进阶技巧,涵盖 DOM 获取、修改、创建、删除元素的方法,事件处理,性能优化及与其他前端技术的结合,助你构建动态交互的网页应用
本文深入讲解了 JavaScript 与 DOM 交互的基础及进阶技巧,涵盖 DOM 获取、修改、创建、删除元素的方法,事件处理,性能优化及与其他前端技术的结合,助你构建动态交互的网页应用。
40 5
|
26天前
|
缓存 负载均衡 JavaScript
构建高效后端服务:Node.js与Express框架实践
在数字化时代的浪潮中,后端服务的重要性不言而喻。本文将通过深入浅出的方式介绍如何利用Node.js及其强大的Express框架来搭建一个高效的后端服务。我们将从零开始,逐步深入,不仅涉及基础的代码编写,更会探讨如何优化性能和处理高并发场景。无论你是后端新手还是希望提高现有技能的开发者,这篇文章都将为你提供宝贵的知识和启示。
|
1月前
|
JavaScript 中间件 关系型数据库
构建高效的后端服务:Node.js 与 Express 的实践指南
在后端开发领域,Node.js 与 Express 的组合因其轻量级和高效性而广受欢迎。本文将深入探讨如何利用这一组合构建高性能的后端服务。我们将从 Node.js 的事件驱动和非阻塞 I/O 模型出发,解释其如何优化网络请求处理。接着,通过 Express 框架的简洁 API,展示如何快速搭建 RESTful API。文章还将涉及中间件的使用,以及如何结合 MySQL 数据库进行数据操作。最后,我们将讨论性能优化技巧,包括异步编程模式和缓存策略,以确保服务的稳定性和扩展性。
|
1月前
|
JSON JavaScript API
深入浅出Node.js:从零开始构建RESTful API
【10月更文挑战第39天】 在数字化时代的浪潮中,API(应用程序编程接口)已成为连接不同软件应用的桥梁。本文将带领读者从零基础出发,逐步深入Node.js的世界,最终实现一个功能完备的RESTful API。通过实践,我们将探索如何利用Node.js的异步特性和强大的生态系统来构建高效、可扩展的服务。准备好迎接代码和概念的碰撞,一起解锁后端开发的新篇章。
下一篇
DataWorks