【408考点之数据结构】树形查找

树形查找

树形查找是利用树这种数据结构进行查找操作的方法。树形查找的主要优势在于它能够通过层次结构有效地组织数据,使得查找、插入和删除操作都能够高效进行。以下是对树形查找的详细总结。

1. 二叉查找树(Binary Search Tree, BST)

定义:二叉查找树是一种特殊的二叉树,其中每个节点的左子树中的所有节点的值都小于该节点的值,而右子树中的所有节点的值都大于该节点的值。

实现

#include <stdio.h>
#include <stdlib.h>// 定义二叉查找树的节点结构
struct Node {int data;struct Node* left;struct Node* right;
};// 创建新节点
struct Node* newNode(int item) {struct Node* temp = (struct Node*)malloc(sizeof(struct Node));temp->data = item;temp->left = temp->right = NULL;return temp;
}// 插入节点
struct Node* insert(struct Node* node, int data) {if (node == NULL) return newNode(data);if (data < node->data)node->left = insert(node->left, data);else if (data > node->data)node->right = insert(node->right, data);return node;
}// 查找节点
struct Node* search(struct Node* root, int key) {if (root == NULL || root->data == key)return root;if (root->data < key)return search(root->right, key);return search(root->left, key);
}int main() {struct Node* root = NULL;root = insert(root, 50);insert(root, 30);insert(root, 20);insert(root, 40);insert(root, 70);insert(root, 60);insert(root, 80);struct Node* result = search(root, 70);if (result != NULL)printf("找到元素: %d\n", result->data);elseprintf("未找到元素\n");return 0;
}
2. 平衡二叉树(Balanced Binary Tree)

平衡二叉树是一种改进的二叉查找树,通过保持树的平衡来确保查找操作的效率。常见的平衡二叉树包括AVL树和红黑树。

AVL树:每个节点的左右子树的高度差最多为1,插入和删除操作会通过旋转操作来保持这种平衡。

// AVL树节点结构定义和旋转操作略
// 示例代码略

红黑树:一种近似平衡的二叉查找树,保证任何一个节点到其每个叶子的最长路径不超过最短路径的两倍。红黑树的插入和删除操作通过调整颜色和旋转操作来维持平衡。

// 红黑树节点结构定义和旋转操作略
// 示例代码略
3. B树和B+树

B树:一种自平衡的多路查找树,适用于磁盘存储系统中,能高效进行大规模数据的查找、插入和删除操作。B树的每个节点可以包含多个关键字和子树指针。

B+树:B树的变种,所有的关键字都出现在叶子节点,并且叶子节点通过指针串联起来,适用于范围查找操作。

// B树和B+树节点结构定义和基本操作略
// 示例代码略

树形查找的应用场景

树形查找在实际应用中有广泛的应用场景,包括:

  1. 数据库索引:数据库系统中广泛使用B树和B+树作为索引结构,以提高数据检索的效率。
  2. 文件系统:文件系统中的目录管理和文件索引通常使用树形结构进行组织。
  3. 编译器实现:编译器在语法分析阶段使用抽象语法树(AST)来表示程序的结构。
  4. 网络路由:网络路由算法中使用树形结构来组织和查找路由信息。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/38026.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

第4章:操作系统

第4章&#xff1a;操作系统 操作系统概述 进程管理 在有限的资源下&#xff0c;要保证系统不发生死锁&#xff0c;则可以按这种逻辑来分析。首先给每个进程分配所需资源数减1个资源&#xff0c;然后系统还有1个资源&#xff0c;则不可能发生死锁。 线程 存储管理 虚拟存储器的…

C++ //练习 14.22 定义赋值运算符的一个新版本,使得我们能把一个表示ISBN的string赋给一个Sales_data对象。

C Primer&#xff08;第5版&#xff09; 练习 14.22 练习 14.22 定义赋值运算符的一个新版本&#xff0c;使得我们能把一个表示ISBN的string赋给一个Sales_data对象。 环境&#xff1a;Linux Ubuntu&#xff08;云服务器&#xff09; 工具&#xff1a;vim 代码块 struct Sa…

全面讲解GRASP原则

学习目标&#xff1a; 掌握GRASP 学习内容&#xff1a; GRASP&#xff08;General Responsibility Assignment Software Patterns&#xff0c;通用责任分配软件模式&#xff09;原则是一组设计原则和模式&#xff0c;旨在帮助软件设计人员合理地分配类和对象的责任。GRASP原则…

昇思25天学习打卡营第九天|使用静态图加速

背景 提供免费算力支持&#xff0c;有交流群有值班教师答疑的华为昇思训练营进入第九天了。 今天是第九天&#xff0c;前八天的学习内容可以看链接 昇思25天学习打卡营第一天|快速入门 昇思25天学习打卡营第二天|张量 Tensor 昇思25天学习打卡营第三天|数据集Dataset 昇思25天…

高效的向量搜索算法——分层可导航小世界图(HNSW)

最近在接触大模型相关内容&#xff0c;发现一种高效的向量搜索算法HNSW&#xff0c;这里做一下记录。 在之前自己也接触过一段时间的复杂网络&#xff08;网络科学&#xff09;&#xff0c;没想到&#xff0c;将网络科学的思想引入到向量搜索算法中&#xff0c;可以产生令人眼前…

如何实现公网环境远程连接本地局域网宝塔FTP服务远程管理文件

文章目录 前言1. Linux安装Cpolar2. 创建FTP公网地址3. 宝塔FTP服务设置4. FTP服务远程连接小结 5. 固定FTP公网地址6. 固定FTP地址连接 &#x1f4a1;推荐 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。…

Python28-5 k-means算法

k-means 算法介绍 k-means 算法是一种经典的聚类算法&#xff0c;其目的是将数据集分成 ( k ) 个不同的簇&#xff0c;每个簇内的数据点尽可能接近。算法的基本思想是通过反复迭代优化簇中心的位置&#xff0c;使得每个簇内的点与簇中心的距离之和最小。k-means 算法的具体步骤…

S7-1500轴工艺对象105报文安装(硬件目录的支持包 HSP)

S7-1500PLC里硬件组态没法组态到105报文是因为对应的HSP文件没有安装&#xff0c;首先需要安装对应的HSP文件。 1、HSP文件安装 V19版本的HSP安装链接如下 https://download.csdn.net/download/m0_46143730/89503735 2、安装HSP文件 3、需要将博途软件关闭才能完成安装 4、拖…

猫头虎博主全栈前沿AI技术领域矩阵社群

猫头虎博主全栈前沿AI技术领域矩阵社群 &#x1f44b;大家好&#xff0c;我是猫头虎&#xff01;今天我要向大家介绍一个非常重要的社群矩阵——专为全栈前沿AI技术领域的朋友们打造的各种技术交流和资源互助的社群。这些社群不仅能帮助大家快速提升技术水平&#xff0c;还能拓…

Java中的行为驱动开发(BDD)实践

Java中的行为驱动开发&#xff08;BDD&#xff09;实践 大家好&#xff0c;我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01;今天我们将深入探讨Java中的行为驱动开发&#xff08;BD…

【MySQL备份】Percona XtraBackup全量备份实战篇

目录 1. 前言 2.准备工作 2.1.环境信息 2.2.创建备份目录 2.3.配置/etc/my.cnf文件 2.4.授予root用户BACKUP_ADMIN权限 3.全量备份 4.准备备份 5.数据恢复 6.总结 "实战演练&#xff1a;利用Percona XtraBackup执行MySQL全量备份操作详解" 1. 前言 本文…

《廖雪峰Java教程》——面向对象基础(1)

参考资料&#xff1a; 面向对象基础 - 廖雪峰的官方网站 (liaoxuefeng.com) 方法 Java 的方法允许定义可变参数&#xff1a; class Group {private String[] names;public void setNames(String... names) {this.names names;} }用可变参数代替数组类型的好处有&#xff1…

Java服务器代码远程调试(IDEA版)

Java服务器代码远程调试 配置启动脚本参数配置IDEA远程调试工具操作步骤 注意&#xff1a;远程调试的代码需要与本地代码一致&#xff0c;远程调试目的是解决本地环境无法支持调试的情况下&#xff0c;解决线上&#xff08;测试&#xff09;环境调试问题。 配置启动脚本参数 n…

如何压缩视频大小,怎么压缩视频

在数字化浪潮中&#xff0c;视频已成为我们生活和工作的重要部分。但视频往往伴随着大文件体积&#xff0c;这给存储和分享带来了不少困扰。本文将为您揭秘好用的压缩视频的方法&#xff0c;帮助您轻松减小视频文件大小&#xff0c;提高分享效率&#xff01; 方法&#xff0c;使…

C++——模拟战争游戏

以下是一个使用C编写的简单模拟战争游戏的示例代码&#xff1a; #include <iostream> #include <vector> #include <random>// 声明一个简单的战士类 class Warrior { public:Warrior(int attackPower) : m_attackPower(attackPower) {}int getAttackPower(…

spring boot 整合 sentinel

注意版本问题 我这是jdk11 、spring boot 2.7.15 、 alibaba-sentinel 2.1.2.RELEASE <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.7.15</version><…

[图解]SysML和EA建模住宅安全系统-05-参数图

1 00:00:01,140 --> 00:00:03,060 这是实数没错&#xff0c;这是分钟 2 00:00:03,750 --> 00:00:07,490 但是你在这里选&#xff0c;选不了的 3 00:00:07,500 --> 00:00:09,930 因为它这里不能够有那个 4 00:00:11,990 --> 00:00:13,850 但是我们前面这里 5 00…

vue长列表,虚拟滚动

1.新建子组件&#xff0c;将数据传递过去(几万条数据的数组&#xff0c;一次性展示多少条&#xff0c;每条数据的行高). <template><div class"vitualScroll"><sub-scroll :dataList"dataList" :rowCount"20" :rowHeight"2…

[JavaScript]“复杂”的 this

【版权声明】未经博主同意&#xff0c;谢绝转载&#xff01;&#xff08;请尊重原创&#xff0c;博主保留追究权&#xff09; https://blog.csdn.net/m0_69908381/article/details/140092319 出自【进步*于辰的博客】 参考笔记二&#xff0c;P6.1&#xff1b;笔记三&#xff0c…

【链表】- 两数相加

1. 对应力扣题目连接 两数相加 2. 实现案例代码 public class AddingTwoNumbers {public static void main(String[] args) {// 示例用例 1ListNode l1 new ListNode(2);l1.next new ListNode(4);l1.next.next new ListNode(5);ListNode l2 new ListNode(5);l2.next ne…