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实现复杂功能:构建一个自定义的拖拽功能
|
1月前
|
JavaScript 前端开发 开发工具
使用Vue.js、Vuetify和Netlify构建现代化的响应式网站
使用Vue.js、Vuetify和Netlify构建现代化的响应式网站
31 0
|
1月前
|
开发框架 前端开发 JavaScript
使用JavaScript、jQuery和Bootstrap构建待办事项应用
使用JavaScript、jQuery和Bootstrap构建待办事项应用
11 0
|
3月前
|
JavaScript 前端开发
NUS CS1101S:SICP JavaScript 描述:二、使用数据构建抽象
NUS CS1101S:SICP JavaScript 描述:二、使用数据构建抽象
26 0
|
2月前
|
Web App开发 JavaScript NoSQL
深入浅出:构建基于Node.js的RESTful API
在当今快速发展的互联网时代,RESTful API已成为前后端分离架构中不可或缺的一部分。本文旨在为初学者和中级开发人员提供一个清晰、简洁的指南,详细介绍如何使用Node.js构建一个高效、可维护的RESTful API。通过结合实际案例,本文将从API设计理念出发,深入讲解如何利用Express框架及MongoDB数据库实现API的增删改查功能,同时探讨如何通过JWT进行安全认证,确保数据传输的安全性。此外,文章还将简要介绍如何使用Swagger生成API文档,使得API的测试和维护更加便捷。无论你是希望提升现有项目的API设计,还是想从零开始构建一个新项目,本文都将为你提供一条清晰的道路
|
4月前
|
存储 设计模式 监控
如何构建自定义 Node.js 事件发射器
如何构建自定义 Node.js 事件发射器
456 2
|
5天前
|
JavaScript 前端开发 API
Vue.js:构建高效且灵活的Web应用的利器
Vue.js:构建高效且灵活的Web应用的利器
|
1月前
|
Web App开发 JavaScript 前端开发
使用Node.js和Express构建RESTful API
使用Node.js和Express构建RESTful API
14 0
|
1月前
|
JavaScript 前端开发 API
Vue.js:构建现代化Web应用的灵活选择
Vue.js:构建现代化Web应用的灵活选择
37 0
|
1月前
|
前端开发 JavaScript
从0到1:用HTML、CSS和JavaScript构建一个简单的待办事项列表
从0到1:用HTML、CSS和JavaScript构建一个简单的待办事项列表
24 0