学习第十一天-树

一、树的基础概念
1. 定义
树是一种非线性数据结构,由 n 个有限节点组成层次关系集合。特点:
- 有且仅有一个根节点
- 其余节点分为若干互不相交的子树
- 节点间通过父子关系连接
2. 关键术语
| 术语 | 定义 |
|---|---|
| 节点 | 包含数据和子节点引用的单元 |
| 根节点 | 树的起始节点,没有父节点 |
| 子节点 | 直接连接到父节点的节点 |
| 叶子节点 | 没有子节点的节点 |
| 度 | 节点拥有的子树数目 |
| 树的高度 | 从根节点到最远叶子节点的最长路径边数 |
| 树的深度 | 从根节点到当前节点的层数 |
| 路径 | 从根到某节点的唯一通道 |
3. 分类
- 二叉树:每个节点最多两个子节点(左子树 / 右子树)
- 多叉树:每个节点可包含多个子节点(如三叉树、四叉树)
- 有序树:子树顺序有意义(如二叉搜索树)
- 无序树:子树顺序无关
二、二叉树的核心特性
1. 特殊二叉树
- 满二叉树:所有层节点数达到最大值
- 完全二叉树:最后一层节点靠左排列,其余层满
- 二叉搜索树:左子树值 < 根值 < 右子树值
2. 重要性质
- 第 i 层最多有 2^(i-1) 个节点
- 高度为 h 的二叉树最多有 2^h -1 个节点
- 完全二叉树节点编号 i 的子节点为 2i 和 2i+1
- 叶子节点数 = 度为 2 的节点数 + 1
3. 存储结构
| 方式 | 实现方式 | 适用场景 |
|---|---|---|
| 数组存储 | 按层序编号存储节点值 | 完全二叉树 |
| 链式存储 | 结构体包含左右指针 | 任意二叉树 |
三、二叉树遍历方法
1. 深度优先遍历
- 前序遍历:根→左→右
递归实现:收起
python
def preorder(root):if root:print(root.val)preorder(root.left)preorder(root.right) - 中序遍历:左→根→右
应用: 二叉搜索树中序遍历结果有序 - 后序遍历:左→右→根
应用: 计算表达式树
2. 广度优先遍历
- 层序遍历:逐层访问节点
队列实现:收起
python
def levelorder(root):queue = [root]while queue:node = queue.pop(0)print(node.val)if node.left: queue.append(node.left)if node.right: queue.append(node.right)
3. 遍历对比
| 遍历方式 | 时间复杂度 | 空间复杂度 | 典型应用 |
|---|---|---|---|
| 前序 | O(n) | O(h) | 复制树、生成括号 |
| 中序 | O(n) | O(h) | 二叉搜索树排序 |
| 后序 | O(n) | O(h) | 删除树、计算表达式 |
| 层序 | O(n) | O(w) | 层次处理、找最近公共祖先 |
四、树结构的典型应用
- 文件系统:目录结构(Windows 资源管理器)
- XML/JSON 解析:文档对象模型(DOM)
- 数据库索引:B 树 / B + 树优化查询
- 压缩算法:哈夫曼树构建最优前缀编码
- 人工智能:决策树、蒙特卡洛树搜索
- 网络路由:路由表的层次化存储
五、高级树结构详解
5.1 B 树(B-Tree)
5.1.1 定义与特性
- 平衡多路查找树,所有叶子节点在同一层
- 阶数 m:每个节点最多有 m 个子节点(m≥2)
- 关键特性:
- 根节点至少 2 个子节点
- 非根节点至少⌈m/2⌉个子节点
- 叶子节点包含所有数据
5.1.2 操作复杂度
| 操作 | 时间复杂度 |
|---|---|
| 查找 | O(log_m n) |
| 插入 | O(log_m n) |
| 删除 | O(log_m n) |
5.1.3 典型应用
- 数据库索引(如 MySQL 的 InnoDB 引擎)
- 文件系统目录结构
- 外部存储数据管理
5.1.4 与二叉搜索树对比
| 特性 | B 树 | 二叉搜索树 |
|---|---|---|
| 平衡方式 | 多叉平衡 | 二叉平衡 |
| 查找效率 | 更低的 I/O 次数 | 依赖树的高度 |
| 适用场景 | 外存数据管理 | 内存数据管理 |
5.2 红黑树(Red-Black Tree)
5.2.1 定义与性质
- 自平衡二叉搜索树,通过颜色标记保持平衡
- 五大性质:
- 节点颜色为红或黑
- 根节点为黑色
- 叶子节点(NIL)为黑色
- 红节点的子节点必须为黑色
- 从任一节点到其叶子的路径包含相同数量黑节点
5.2.2 操作复杂度
| 操作 | 时间复杂度 |
|---|---|
| 查找 | O(log n) |
| 插入 | O(log n) |
| 删除 | O(log n) |
5.2.3 典型应用
- Java 的 TreeMap/TreeSet
- C++ 的 std::map
- Linux 内核的进程调度
- Nginx 的定时器管理
5.2.4 旋转操作
- 左旋转:将某个节点作为支点向左下方旋转
- 右旋转:将某个节点作为支点向右上方旋转
- 示例代码片段:
收起
python
def left_rotate(x):y = x.rightx.right = y.leftif y.left:y.left.parent = xy.parent = x.parentif x.parent is None:root = yelif x == x.parent.left:x.parent.left = yelse:x.parent.right = yy.left = xx.parent = y
5.3 其他重要树结构
| 类型 | 核心特性 | 典型应用 |
|---|---|---|
| AVL 树 | 严格平衡(左右子树高度差≤1) | 内存中的有序数据 |
| 哈夫曼树 | 带权路径长度最小 | 数据压缩(如 ZIP 算法) |
| B + 树 | 所有数据在叶子节点,非叶子存索引 | 数据库索引 |
| 线段树 | 区间查询优化 | 统计类问题 |
| 字典树 (Trie) | 前缀共享存储 | 拼写检查、IP 路由表 |
六、树结构对比与选择策略
6.1 平衡树对比
| 结构 | 平衡条件 | 插入 / 删除复杂度 | 适用场景 |
|---|---|---|---|
| B 树 | 多叉平衡 | O(log_m n) | 外存数据管理 |
| 红黑树 | 颜色标记平衡 | O(log n) | 内存有序结构 |
| AVL 树 | 高度差平衡 | O(log n) | 频繁查询场景 |
6.2 选择策略
- 内存场景:
- 数据量小 → 二叉搜索树
- 数据量大 → 红黑树 / AVL 树
- 外存场景:
- 读多写少 → B + 树
- 读写均衡 → B 树
- 特殊需求:
- 前缀匹配 → Trie 树
- 数据压缩 → 哈夫曼树
七、树结构算法优化技巧
- 空间优化:
- 使用数组存储完全二叉树(节省指针空间)
- 共享子树结构(如 Trie 树的前缀共享)
- 时间优化:
- 利用缓存友好性(B 树的节点大小与磁盘块对齐)
- 延迟更新(如红黑树的懒删除)
- 并行处理:
- 多叉树的多路并行查找
- 分布式哈希表(DHT)的树状路由
相关文章:
学习第十一天-树
一、树的基础概念 1. 定义 树是一种非线性数据结构,由 n 个有限节点组成层次关系集合。特点: 有且仅有一个根节点其余节点分为若干互不相交的子树节点间通过父子关系连接 2. 关键术语 术语定义节点包含数据和子节点引用的单元根节点树的起始节点&#…...
网络服务之SSH协议
一.SSH基础 1.1 什么是ssh SSH(Secure Shell)协议是一种用于字符界面远程登录和数据加密传输的协议。 1.2 ssh优点 优点: 数据传输是加密的,可以防止信息泄漏 数据传输是压缩的,可以提高传输速度 注意ÿ…...
蓝桥杯 之 前缀和与查分
文章目录 题目求和棋盘挖矿 前缀和有利于快速求解 区间的和、异或值 、乘积等情况差分是前缀和的反操作 前缀和 一维前缀和: # 原始的数组num,下标从1到n n len(num) pre [0]*(n1) for i in range(n):pre[i1] pre[i] num[i] # 如果需要求解num[l] 到num[r] 的区…...
GB28181开发--ZLMediaKit+WVP+Jessibuca
一、核心组件功能 1、ZLMediaKit 定位:基于 C++11 的高性能流媒体服务框架,支持 RTSP/RTMP/HLS/HTTP-FLV 等协议互转,具备低延迟(最低 100ms)、高并发(单机 10W 级连接)特性,适用于商用级流媒体服务器部署。 特性:跨平台(Linux/Windows/ARM 等)、支持 …...
Ubuntu20.04 在离线机器上安装 NVIDIA Container Toolkit
步骤 1.下载4个安装包 Index of /nvidia-docker/libnvidia-container/stable/ nvidia-container-toolkit-base_1.13.5-1_amd64.deb libnvidia-container1_1.13.5-1_amd64.deb libnvidia-container-tools_1.13.5-1_amd64.deb nvidia-container-toolkit_1.13.5-1_amd64.deb 步…...
如何快速上手RabbitMQ 笔记250304
如何快速上手RabbitMQ 要快速上手 RabbitMQ,可以按照以下步骤进行,从安装到基本使用逐步掌握核心概念和操作: 1. 理解核心概念 Producer(生产者):发送消息的程序。Consumer(消费者)…...
无人机端部署 AI 模型,实现实时数据处理和决策
在无人机端部署 AI 模型,实现实时数据处理和决策,是提升无人机智能化水平的关键技术之一。通过将 AI 模型部署到无人机上,可以实现实时目标检测、路径规划、避障等功能。以下是实现这一目标的详细方案和代码示例。 一、实现方案 1. 硬件选择…...
CentOS 7中安装Dify
Dify 是一个开源的 LLM 应用开发平台。其直观的界面结合了 AI 工作流、RAG 管道、Agent、模型管理、可观测性功能等,让您可以快速从原型到生产。尤其是我们本地部署DeepSeek等大模型时,会需要用到Dify来帮我们快捷的开发和应用。 大家可以参考学习它的中…...
CoDrivingLLM
CoDrivingLLM 思路 1.输入和输出 输入 算法的输入包括车辆当前时刻的状态 S t S_t St ,这个状态包含了车辆的位置、速度、行驶方向等信息;以及参与协同驾驶的联网自动驾驶汽车列表C,用于确定需要进行决策的车辆集合。 输出 输出为车辆…...
Centos7升级openssl和openssh最新版
1、事前准备 下载openssl3.4.1和openssh9.9p2压缩包上传到服务器 https://cdn.openbsd.org/pub/OpenBSD/OpenSSH/portable// Release OpenSSL 3.4.1 openssl/openssl GitHub 2、查看centos7、ssh以及openssl的版本信息 # 查看CentOS系统版本信息 cat /etc/redhat-release …...
相控阵扫盲
下图展示天线增益 在仰角为0度的情况下随着方位角的变化而变化。需要注意到的是在天线视轴方向上的高增益主瓣上还有几个低增益旁瓣 阵列因子乘以新的阵元方向图会形成指向性更强的波速...
nginx 配置 301跳转
HTTP 跳转到 HTTPS 将所有 HTTP 请求(80 端口)跳转到 HTTPS(443 端口): server {listen 80;server_name example.com;# 跳转到 HTTPSreturn 301 https://$host$request_uri; }server {listen 443 ssl;server_name exa…...
开发环境搭建-03.后端环境搭建-使用Git进行版本控制
一.Git进行版本控制 我们对项目开发就会产生很多代码,我们需要有效的将这些代码管理起来,因此我们真正开发代码前需要把我们的Git环境搭建好。通过Git来管理我们项目的版本,进而实现版本控制。 首先我们使用Git创建本地仓库,然后…...
vivado 充分利用 IP 核
充分利用 IP 核 使用预先验证的 IP 核能够大幅减少设计和验证工作量,从而加速产品上市进程。如需了解更多有利用 IP 的信息,请参 阅以下资源: • 《 Vivado Design Suite 用户指南:采用 IP 进行设计》 (UG896) [ 参照 1…...
外盘农产品期货数据:历史高频分钟回测的分享下载20250305
外盘农产品期货数据:历史高频分钟回测的分享下载20250305 在国际期货市场中,历史分钟高频数据的作用不可小觑。这些数据以分钟为时间尺度,详细记录了期货合约的价格变动和交易量信息,为投资者提供了全面、深入的市场分析视角。通…...
计算机毕设-基于springboot的网上商城系统的设计与实现(附源码+lw+ppt+开题报告)
博主介绍:✌多个项目实战经验、多个大型网购商城开发经验、在某机构指导学员上千名、专注于本行业领域✌ 技术范围:Java实战项目、Python实战项目、微信小程序/安卓实战项目、爬虫大数据实战项目、Nodejs实战项目、PHP实战项目、.NET实战项目、Golang实战…...
用DeepSeek-R1-Distill-data-110k蒸馏中文数据集 微调Qwen2.5-7B-Instruct!
下载模型与数据 模型下载: huggingface: Qwen/Qwen2.5-7B-Instruct HF MirrorWe’re on a journey to advance and democratize artificial intelligence through open source and open science.https://hf-mirror.com/Qwen/Qwen2.5-7B-Instruct 魔搭&a…...
【C++设计模式】第四篇:建造者模式(Builder)
注意:复现代码时,确保 VS2022 使用 C17/20 标准以支持现代特性。 分步骤构造复杂对象,实现灵活装配 1. 模式定义与用途 核心目标:将复杂对象的构建过程分离,使得同样的构建步骤可以创建不同的表示形式。 常见场景&am…...
【杂谈】信创电脑华为w515(统信系统)登录锁定及忘记密码处理
华为w515麒麟芯片版,还有非麒麟芯片版本,是一款信创电脑,一般安装的UOS系统。 准备一个空U盘,先下载镜像文件及启动盘制作工具,连接如下: 百度网盘 请输入提取码 http://livecd.uostools.com/img/apps/l…...
VBA信息获取与处理第五节:如何在单个工作表中查找某个给定值
《VBA信息获取与处理》教程(版权10178984)是我推出第六套教程,目前已经是第一版修订了。这套教程定位于最高级,是学完初级,中级后的教程。这部教程给大家讲解的内容有:跨应用程序信息获得、随机信息的利用、电子邮件的发送、VBA互…...
零基础极速上手教程:用AI建站工具10分钟生成你的第一个网站
你是不是也想过拥有一个属于自己的网站,但总觉得那是程序员才干得了的事?或者你曾经试过一些建站工具,结果被复杂的后台、密密麻麻的选项和所谓的「可视化拖拽」搞得晕头转向?别担心,今天这篇教程,就是专门…...
告别M3U8下载烦恼:N_m3u8DL-CLI-SimpleG让你的视频下载变得超简单!
告别M3U8下载烦恼:N_m3u8DL-CLI-SimpleG让你的视频下载变得超简单! 【免费下载链接】N_m3u8DL-CLI-SimpleG N_m3u8DL-CLIs simple GUI 项目地址: https://gitcode.com/gh_mirrors/nm3/N_m3u8DL-CLI-SimpleG 你是否曾经面对心爱的在线视频却束手无…...
JetBrains IDE试用期重置终极指南:专业开发者必备的30天循环解决方案
JetBrains IDE试用期重置终极指南:专业开发者必备的30天循环解决方案 【免费下载链接】ide-eval-resetter 项目地址: https://gitcode.com/gh_mirrors/id/ide-eval-resetter 在当今软件开发领域,JetBrains系列IDE凭借其卓越的代码智能提示、强大…...
Codex 怎么详细科学地先出计划
本文聚焦一个非常关键的使用能力:让 Codex 在执行之前先出计划。很多人一上来就让 Codex 改代码、修 bug、做联动,结果不是方向偏了,就是改动过大、验证困难。先出计划的价值,不是多一个步骤,而是让复杂任务先被看清楚…...
环境科学论文降AI工具免费推荐:2026年环境科学研究生毕业论文降AI知网维普99.26%4.8元完整指南
环境科学论文降AI工具免费推荐:2026年环境科学研究生毕业论文降AI知网维普99.26%4.8元完整指南 整理了一份环境科学论文降AI的完整选购指南,按性价比排序。 首推嘎嘎降AI(www.aigcleaner.com),4.8元,99.2…...
为什么顶尖纳米实验室已停用传统文献管理工具?NotebookLM私有知识中枢部署避坑清单(限内部研究员参考)
更多请点击: https://codechina.net 第一章:NotebookLM纳米技术研究 NotebookLM 是 Google 推出的基于 AI 的研究协作者工具,其核心能力在于对用户上传的私有文档进行深度语义理解与上下文推理。在纳米技术这一高度跨学科、文献密集的研究领…...
【工具实战】告别网页操作:利用Alist+Rclone打造无缝云盘本地化体验
1. 为什么需要云盘本地化? 每次想从网盘下载文件都要打开浏览器、登录账号、找到文件、点击下载,这一套流程走下来至少得花两三分钟。更别提上传大文件时网页端动不动就卡死,或是遇到网络波动导致传输中断的糟心体验。我去年整理家庭照片时就…...
Molflow仿真结果怎么看?Texture、Profile、Counter Facet全解析,选对方法效率翻倍
Molflow仿真结果解读实战指南:Texture、Profile、Counter Facet深度解析 面对真空系统仿真结果,许多工程师常陷入"数据海洋"的困惑——明明跑完了模拟,却不知如何高效提取关键信息。Molflow作为专业级真空仿真工具,提供…...
Gita异步执行机制详解:高效管理大型项目的核心技术
Gita异步执行机制详解:高效管理大型项目的核心技术 【免费下载链接】gita Manage many git repos with sanity 从容管理多个git库 项目地址: https://gitcode.com/gh_mirrors/gi/gita 在现代软件开发中,开发者经常需要同时管理多个Git仓库。随着项…...
Discourse Docker持续集成:自动化构建与部署完整指南 [特殊字符]
Discourse Docker持续集成:自动化构建与部署完整指南 🚀 【免费下载链接】discourse_docker A Docker image for Discourse 项目地址: https://gitcode.com/gh_mirrors/dis/discourse_docker Discourse Docker持续集成是现代论坛部署的最佳实践&a…...
