《数据结构与算法JavaScript描述》二叉树和二叉查找树(学习笔记C10)

(6)NUC980 SPI Nand 启动 方式一:下载到SPI-NAND-Flash中,这种方式可以将程序固化到SPIflash中,可以掉电保存。第二种方式下载到DDR中程序掉电丢失,但是DDR调试方便,时候调试的时候使用。之前的设置都是基于SD卡启动,今天测试一下是用SPI flash启动。方式二: 下载到DDR中,①设置为USB启动②下载到DDR中③运行。1:烧写BootLoader。 阅读详情

二叉树和二叉查找树

相关概念

1.树是一种非线性的数据结构,以分层的方式存储数据。
2.树被用来存储具有层级关系的数据,比如文件系统中的文件;树还被用来存储有序列表。
3.选择树而不是那些基本的数据结构,是因为在二叉树上进行查找非常快(而在链表上查找则不是这样),为二叉树添加或删除元素也非常快(而对数组执行添加或删除操作则不是这样)。
4.二叉树是一种特殊的树,它的子节点个数不超过两个。
5.二叉查找树是一种特殊的二叉树,相对较小的值保存在左节点中,较大的值保存在右节点中。

代码

// 二叉树和二叉查找树

// 1.二叉查找树 BST
function Node(data, left, right) {
    this.data  =data
    this.left = left
    this.right = right
    this.show = show
}

function show() {
    return this.data
}

function BST() {
    this.root = null
    this.insert = insert
    this.inOrder = inOrder
    this.preOrder = preOrder
    this.postOrder = postOrder
    this.getMin = getMin
    this.getMax = getMax
    this.find = find
    this.update = update
}

function insert(data) {
    var n = new Node(data, null, null)
    if (this.root == null) {
        this.root = n
    } else {
        var current = this.root
        var parent
        while (true) {
            parent = current
            if (data < current.data) {
                current = current.left
                if (current == null) {
                    parent.left = n
                    break
                }
            } else {
                current = current.right
                if (current == null) {
                    parent.right = n
                    break
                }
            }
        }
    }

}

// 2.遍历二叉查找树
/**
 * 先序遍历:先访问根节点,再以同样方式访问左子树和右子树
 * 中序遍历:按照节点上的键值,以升序访问BST上所有节点
 * 后序遍历:先访问叶子节点,从左子树到右子树,再到根节点
 */

 // 中序遍历
 function inOrder(node) {
     if (!(node == null)) {
         inOrder(node.left)
         console.log(node.show() + ' ')
         inOrder(node.right)
     }
 }

  // 先序遍历
 function preOrder(node) {
     if (!(node == null)) {
         console.log(node.show() + ' ')
         preOrder(node.left)
         preOrder(node.right)
     }
 }

 // 后序遍历
 function postOrder(node) {
     if (!(node == null)) {
         postOrder(node.left)
         postOrder(node.right)
         console.log(node.show() + ' ')
     }
 }

 // 测试遍历
  var nums = new BST();
  nums.insert(23);
  nums.insert(45);
  nums.insert(16);
  nums.insert(37);
  nums.insert(3);
  nums.insert(99);
  nums.insert(22);
  console.log("Inorder traversal: ");
  inOrder(nums.root);
  console.log("preOrder traversal: ");
  preOrder(nums.root);
  console.log("postOrder traversal: ");
  postOrder(nums.root);
 
 // 3.在二叉查找树上进行查找
 
 // 查找最小值
 function getMin() {
     var current = this.root
     while (!(current.left == null)) {
         current = current.left
     }
     return current.data
 }
 
 // 查找最大值
 function getMax() {
     var current = this.root
     while (!(current.right == null)) {
         current = current.right
     }
     return current.data
 }

 // 查找给定值
 function find(data) {
     var current = this.root
     while (current != null) {
         if (current.data == data) {
             return current
         } else if (data < current.data) {
             current = current.left
         } else {
             current = current.right
         }
     }
     return null
 }

 // 测试最值/指定值
  var nums = new BST();
  nums.insert(23);
  nums.insert(45);
  nums.insert(16);
  nums.insert(37);
  nums.insert(3);
  nums.insert(99);
  nums.insert(22);
  var min = nums.getMin();
  console.log("The minimum value of the BST is: " + min);
  console.log("\n");
  var max = nums.getMax();
  console.log("The maximum value of the BST is: " + max);

  inOrder(nums.root);
  console.log("\n");
  console.log("Enter a value to search for: ");
  var value = parseInt(66);
  var found = nums.find(value);
  if (found != null) {
      console.log("Found " + value + " in the BST.");
  } else {
      console.log(value + " was not found in the BST.");
  }

 // 4.删除指定节点
 function remove(data) {
     root = removeNode(this.root, data)
 }

 function removeNode(node, data) {
     if (node == null) {
         return null
     }
     if (data == node.data) {
         // 没有子节点的节点
         if (node.left == null && node.right == null) {
             return null
         }
         // 没有左子节点的节点
         if (node.left == null) {
             return node.right
         }
         // 没有右子节点的节点
         if (node.right == null) {
             return node.left
         }
         // 有两个子节点
         var tempNode = getSmallest(node.right)
         node.data = tempNode.data
         node.right = removeNode(node.right, tempNode.data)
         return node
     } else if (data < node.data) {
         node.left = removeNode(node.left, data)
         return node

     } else {
         node.right = removeNode(node.right, data)
         return node
     }
 }

 // 5.实例:计数
 function Node(data, left, right) {
     this.data = data
     this.count = 1
     this.left = left
     this.right = right
     this.show = show
 }
 // 更新计数
 function update(data) {
     var grade = this.find(data)
     grade.count++
     return grade
 }
 // 
 function prArray(arr) {
     console.log(arr[0].toString() + ' ')
     for(var i = 1; i < arr.length; ++i) {
         console.log(arr[i].toString() + ' ')
         if (i % 10 == 0) {
             console.log('\n')
         }
     }
 }

 function genArray(length) {
     var arr = []
     for(var i = 0; i < length; ++i) {
         arr[i] = Math.floor(Math.random() * 101)
     }
     return arr
 }

 var grades = genArray(100)
 prArray(grades)
 var gradedistro = new BST()
 for(var i = 0; i < grades.length; ++i) {
     var g = grades[i]
     var grade = gradedistro.find(g)
     if (grade == null) {
         gradedistro.insert(g)
     } else {
         gradedistro.update(g)
     }
 }
 var cont = 'y'

 while (cont == 'y') {
     console.log('\n\nEnter a grade: ')
     var g = parseInt(99)
     var aGrade = gradedistro.find(g)
     if (aGrade == null) {
         console.log('No occurrences of ' + g)
     } else {
         console.log('Look at another grade: ')
         cont = 88
     }
 }
基于互联网的智能旧衣回收箱设计与实现 本文介绍了基于嵌入式系统的智能旧衣回收箱的设计与实现,涵盖了硬件设计、软件开发、图像识别、物联网连接等方面的内容。通过利用最新的技术,如图像识别、物联网和云计算,实现了智能、便捷的旧衣物回收系统。未来,随着技术的不断进步,智能回收系统将会在环保领域发挥更大的作用。 阅读详情

相关推荐

Lisflood

文献:基于SWMM和LISFLOOD-FP模型的居住区低影响开发模拟评价。问题:多个节点溢流同时,不行,待解决。目录下,cmd命令行。

警警的博客 2663

js 二叉树图形_用JS实现二叉树

//定义节点class Node {constructor(data){this.root = this;this.data =data;this.left = null;this.right = null}}//创建二叉搜索树(BST))class BinarySearchTree {constructor(){this.root = null}//插入节点insert(data){const ...

weixin_33960655的博客 703

PX4|Gazebo模型加载失败排查指南:从环境变量到资源路径的全面解析

本文针对PX4与Gazebo联合仿真中常见的'Unable to get model name'错误,提供了从环境变量配置、资源路径排查到网络访问问题的全面解决方案。详细解析了GZ_SIM_RESOURCE_PATH等关键变量的作用与设置方法,并给出了离线模型库部署等一劳永逸的修复指南,帮助开发者彻底解决无人机模型加载失败问题。

weixin_29243063的博客 1230

js二叉树实现

1 .简介 如上图所示: “8”为root节点(根节点),“3”和“10”分别为“8” 的左子节点(左子树)和右子节点(右子树), 这颗二叉树的高度为4层, “4”、“6”、“13”没有子节点(左右子树都没),也称为叶子节点, “8”的左子树“3”小于“8”,右子树“10”大于“8”;“3”的左子树“1”小于“3”,右子树“5”大于“3”,形如这种的二叉树称为排序二叉树。 2 .代码实现 &amp;lt...

ky1in93的博客 3410

Kali Linux实战:5分钟复现永恒之蓝漏洞攻击(附Win7靶机配置指南)

本文提供了一份详细的Kali Linux实战指南,指导读者在5分钟内于隔离的虚拟环境中复现经典的永恒之蓝漏洞攻击。内容涵盖从Windows 7靶机配置、网络设置,到使用Nmap进行服务发现、利用Metasploit框架进行漏洞扫描与利用的全过程,并演示了基础的Meterpreter后渗透操作,旨在帮助网络安全学习者通过亲手实践深入理解SMB协议漏洞的攻防原理。

weixin_29313547的博客 196

非华为电脑与MatePad Pro多屏协同实战:从安装管家到攻克连接难题

本文详细介绍了在非华为电脑上安装华为电脑管家并实现与MatePad Pro多屏协同的完整指南。从安装步骤、常见连接失败解决方案到华为账号绑定技巧,提供了实用的操作方法和硬件优化建议,帮助用户攻克连接难题,提升多屏协同的稳定性和流畅度。

weixin_30263073的博客 233

【数据结构与算法】详解什么是树结构,并用代码手动实现一个二叉查找树

本篇文章将开始讲解树结构。其实树结构是平日里我们常见的一种数据结构,例如家族族谱、公司管理层级结构图等,这样的数据结构的存在一定有一定的道理。因此,在计算机领域中,树结构也是会被广泛用到的,例如数据库系统中就有用到。那么本文就从零开始学习一下树结构,并且也会封装一个二叉查找树,本文 3万+ 的详细教程,希望大家耐心观看,我是以一个纯小白的角度来写的这篇文章,相信大家认真看一定都能看懂的

零一的博客 2万+

Excel VBA+Adobe Acrobat Pro PDF发票识别全流程(附避坑指南)

本文详细介绍了如何利用Excel VBA与Adobe Acrobat Pro的API接口,构建一套企业级PDF发票智能识别与处理系统。内容涵盖从环境配置、核心文本提取原理、数据解析清洗到工程化脚本设计的全流程,并针对密码区干扰、不征税发票等常见问题提供避坑指南,旨在帮助财务人员和开发者实现高效、精准的财务数据处理自动化。

weixin_29207439的博客 348

资料分享:送你一本《数据结构与算法JavaScript描述》电子书!

数据结构 是掌握计算机编程必须具备的技能。通常情况下,我想掌握一门编程语言所用的方法就是利用这门语言把数据结构中线性表、栈、队列、字符串、动态数字、整数集合、树、图、搜索、排序等涉及的算法全部写一遍。写完之后,基本上就把这门语言搞定了。 今天给大家分享的就是我从网上找到的利用 JavaScript 语言来实现各种数据结构的算法,希望这本电子书对学习 JavaScript 想从事前端工作的读者有益。...

老马的程序人生 4380

基于YOLOv10的建筑图纸物体检测系统:从数据集构建到UI界面实现

高度结构化的图形元素标准化的符号和标注系统多层次的细节表达精确的尺寸和位置关系。

YOLO 390

CloudCompare 多窗口联动显示点云

CloudCompare支持多窗口联动显示多个点云数据,可以用来比对原始点云数据与语义分割后的结果。 一、创建多个视窗 打开CloudCompare后会默认有一个视图,我们要同时打开两个数据就需要再创建一个视图,选择菜单栏里的3D Views,在下拉菜单中点击new,这样就创建了一个新的视图,这时3D Views的下拉菜单中有3D View 1和3D View 2两个视图,然后点击3D Views下拉菜单中的Title,这时在数据展示区就会出现两个并列的窗口。 二、分别加载点云数据 将数据分别拖进两个

zhaoguanhua的博客 2740

【数据结构与算法学习笔记】

本系列文章为作者学习数据结构与算法所作笔记,笔记参考陈斌老师的课程“数据结构与算法 Python版”和经典的数据结构教材《数据结构(C语言版)》(作者:严蔚敏),后期也参考了LetCode的题解。

floating_heart的博客 3101

ESP32 双雷达融合盲区车辆接近预警系统设计与实现

/ 超声波传感器引脚// 触发引脚// 回声引脚// 预警模块引脚// 蜂鸣器引脚// LED引脚// 串口配置(毫米波雷达用UART2)#define BAUD_RATE 115200 // 雷达串口波特率(IWR6843默认配置)// 预警阈值(可根据实际需求调整)// 高危区阈值(3m)// 预警区阈值(10m)// 传感器数据存储// 毫米波雷达距离(m)// 毫米波雷达速度(km/h)// 超声波距离(m)// 融合后距离(m)

weixin_42300449的博客 745

js学习之数据结构和算法

js中的数据结构 1、列表   待办事项列表、购物清单、最佳十名榜单等等。   适用:     1)数据结构较为简单,     2)不需要在一个长序列中查找元素,或者对其进行排序 2、栈   一摞盘子 ----- 添加删除只能从最上面。   特点:栈被称为一种后入先出的数据结构。是一种高效的数据结构,因为数据只能在栈顶添加或删除,所以这样...

agzs70106的博客 133

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

JavaScript 数据结构与算法之美 - 非线性表中的树、堆是干嘛用的 ?其数据结构是怎样的 ?...

1. 前言 想学好前端,先练好内功,内功不行,就算招式练的再花哨,终究成不了高手。 非线性表(树、堆),可以说是前端程序员的内功,要知其然,知其所以然。 笔者写的 JavaScript 数据结构与算法之美 系列用的语言是 JavaScript ,旨在入门数据结构与算法和方便以后复习。 非...

226

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

javascript二叉树相关的知识

作者我呢,在学这个之前,也是在学习了C语言的数据结构和算法的一些东西,然后我去看这个javascript,因为我感觉那个比较专业一点,好了,我们一起来看一下,什么是二叉树。介绍一下什么是树(tree),抽象一下,树是不是有很多节点,一棵树至少会有一个节点(根节点),// 如果新节点值大于当前节点值,则插入右子节点。// 如果新节点值小于当前节点值,则插入左子节点。如何用js代码写一个二叉查找树呢?// 查询树排序插入。...

yyh231366的博客 521

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

js 二叉树图形_js数据结构和算法(三)二叉树

二叉树的概念二叉树(Binary Tree)是n(n>=0)个结点的有限集合,该集合或者为空集(空二叉树),或者由一个根结点和两棵互不相交的、分别称为根结点的左子树和右子树的二叉树组成。二叉树的特点每个结点最多有两棵子树,所以二叉树中不存在度大于2的结点。二叉树中每一个节点都是一个对象,每一个数据节点都有三个指针,分别是指向父母、左孩子和右孩子的指针。每一个节点都是通过指针相互连接的。相连指...

weixin_36308872的博客 137

js数据结构和算法(三)二叉树

二叉树的概念 二叉树(Binary Tree)是n(n>=0)个结点的有限集合,该集合或者为空集(空二叉树),或者由一个根结点和两棵互不相交的、分别称为根结点的左子树和右子树的二叉树组成。 二叉树的特点 每个结点最多有两棵子树,所以二叉树中不存在度大于2的结点。二叉树中每一个节点都是一个对象,每一个数据节点都有三个指针,分别是指向父母、左孩子和右孩子的指针。每一个节点都是通过指针相互连接

426

Javacript二叉树算法剖析

目录 写在前面 树的定义 树的基本术语 二叉树的定义 二叉树的主要性质 使用Javascript实现二叉查找树 二叉查找树的遍历 1. 中序遍历 2. 先序遍历 3. 后序遍历 查找结点 查找最大值和最小值结点 删除结点 写在前面 树是计算机科学中经常用到的一种数据结构,树是一种非线性的数据结构,以分层的方式存储数据。树被用来存储具有层级关系的数据,比如文件系统中的文...

追风Programer的博客 973

JS数据结构:树

树(tree)形结构是一种重要的非线性结构,依据分支关系定义的层次结构,在这种结构中,每个元素至多只有一个前趋,但可以有多个后继。 树的定义:树(Tree)是n(n 大于等于0)个节点的有限集合T,当n=0时称为空树,否则,称为非空树。 常用的树形表示方法有: 1。集合嵌套法2.凹入表表示法         3.广义表表示法 (A(B(E(k),F),C(G),D(H,I,J))  ...

Preshine 5135

oracle 二叉树函数,JavaScript数据结构和算法之二叉树详解

二叉树的概念二叉树(Binary Tree)是n(n>=0)个结点的有限集合,该集合或者为空集(空二叉树),或者由一个根结点和两棵互不相交的、分别称为根结点的左子树和右子树的二叉树组成。二叉树的特点每个结点最多有两棵子树,所以二叉树中不存在度大于2的结点。二叉树中每一个节点都是一个对象,每一个数据节点都有三个指针,分别是指向父母、左孩子和右孩子的指针。每一个节点都是通过指针相互连接的。相连指...

weixin_39825322的博客 210

学习JavaScript数据结构和算法之二叉树详解

二叉树的概念 二叉树(Binary Tree)是n(n>=0)个结点的有限集合,该集合或者为空集(空二叉树),或者由一个根结点和两棵互不相交的、分别称为根结点的左子树和右子树的二叉树组成。 二叉树的特点 每个结点最多有两棵子树,所以二叉树中不存在度大于2的结点。二叉树中每一个节点都是一个对象,每一个数据节点都有三个指针,分别是指向父母、左孩子和右孩子的指针。每一个节点都是通过指针相互连接的。相连指针的关系都是父子关系。 二叉树节点的定义 二叉树节点定义如下: struct BinaryTreeNode

天涯学馆 385

js遍历树节点下的所有子节点_JavaScript 数据结构与算法之美 - 非线性表中的树、堆是干嘛用的 ?其数据结构是怎样的 ?

1. 前言 想学好前端,先练好内功,内功不行,就算招式练的再花哨,终究成不了高手。非线性表(树、堆),可以说是前端程序员的内功,要知其然,知其所以然。笔者写的 JavaScript 数据结构与算法之美 系列用的语言是 JavaScript ,旨在入门数据结构与算法和方便以后复习。非线性表中的树、堆是干嘛用的 ?其数据结构是怎样的 ?希望大家带着这两个问题阅读下文。2. 树树的数据结构就像我们生活中...

weixin_39553423的博客 580

js视角的数据结构和算法(三)

js视角的数据结构和算法(三)

冷月心的博客 818

这些算法可视化网站助你轻松学算法

来源:公众号【编程珠玑】 作者:守望先生 前言 无疑,数据结构与算法学习最大的难点之一就是如何在脑中形象化其抽象的逻辑步骤。而图像在很多时候能够大大帮助我们理解其对应的抽象化的东西,而如果这个图像还是我们自己一点点画出来的,那么无疑这个印象是最深刻的了。没错,今天给大家分享的就是算法可视化的网站。 Data Structure Visualizations 网站地址为: http...

守望的博客-编程珠玑 1万+

JavaScript 数据结构与算法(一):概述

数据结构与算法 程序设计 = 数据结构 + 算法 什么是数据结构和算法? 我们先来看 几个术语: 数据:是描述客观事物的符号,是计算机中可以操作的对象,是能被计算机识别,并输入给计算机处理的符号集合。 可以比作图书馆中所有的书。 数据元素:是组成数据的、有一定意义的基本单位,在计算机中通常作为整体处理。也被称为记录。 就是书。 数据项:一个数据元素可以由若干个数据项组成。 ...

Bule_daze的博客 378
上一篇: 《数据结构与算法JavaScript描述》散列(学习笔记C08)
下一篇: 《数据结构与算法JavaScript描述》图和图算法(学习笔记C11)
magic-fish
博客等级 码龄9年 3粉丝 25原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值