自学嵌入式day25,树

树的基本概念与特性

  • 定义:树是n(n≥0)个结点的有限集合。n=0时为空树;非空树有且仅有一个根结点,其余结点分为m个互不相交的子树。
  • 术语
    • :结点拥有的子树数。度为0的结点称为叶结点,否则为分支结点。
    • 树的度:树中所有结点的最大度数。
    • 深度/高度:根结点为第1层,向下逐层递增。

二叉树及其特性

  • 定义:二叉树是每个结点最多有两个子树的树结构,子树分左、右且顺序不可颠倒。
  • 特殊类型
    • 斜树:所有结点只有左子树(左斜树)或右子树(右斜树)。
    • 满二叉树:所有分支结点均有左右子树,且叶结点在同一层。
    • 完全二叉树:结点位置与同深度的满二叉树编号完全一致。
  • 性质
    • 第i层最多有 (2^{i-1}) 个结点(i≥1)。
    • 深度为k的树最多有 (2^k - 1) 个结点。
    • 对于任意二叉树,叶结点数 (n_0 = n_2 + 1)((n_2)为度数为2的结点数)。
    • 完全二叉树的深度为 (\lfloor \log_2 n \rfloor + 1)。

树的遍历方式

  • 层序遍历(广度优先):按层次从上到下、从左到右访问结点。
  • 深度优先遍历
    • 前序:根→左→右。
    • 中序:左→根→右。
    • 后序:左→右→根。

哈希表(Hash Table)

  • 核心思想:通过哈希函数 (f(key)) 计算存储位置,实现快速插入和查询(理想情况下O(1))。
  • 哈希函数设计
    • 直接定址法、平方取中法、折叠法、求余法等。
    • 目标:计算简单、分布均匀。
  • 冲突解决
    • 线性探测:冲突后顺序查找下一个空位(+1, +2, ...)。
    • 二次探测:交替尝试 (±1, ±4, ±9, ...)。
    • 随机探测:基于随机数偏移。

哈希表ADT实现示例

c 复制代码
typedef int DATATYPE;
typedef struct {
    DATATYPE* head;
    int tlen;
} HS_TABLE;

// 创建哈希表
HS_TABLE* CreateHsTable(int len);

// 插入数据
int InsertHsTable(HS_TABLE* hs, DATATYPE* data);

// 查找数据
int SearchHsTable(HS_TABLE* hs, DATATYPE* data);

// 销毁哈希表
int DestroyHsTable(HS_TABLE* hs);

关键点总结

  • 树与二叉树:层次结构明确,遍历方式多样,适用于动态数据存储与快速查找。
  • 哈希表:通过哈希函数直接定位数据,冲突解决策略影响性能。
  • 时间复杂度:理想情况下,哈希表操作接近O(1),树操作通常为O(log n)。
相关推荐
威迪斯特34 分钟前
CentOS图形化操作界面:理论解析与实践指南
linux·运维·centos·组件·图形化·桌面·xserver
一方热衷.40 分钟前
在线安装对应版本NVIDIA驱动
linux·运维·服务器
独自归家的兔43 分钟前
ubuntu系统安装dbswitch教程 - 备份本地数据到远程服务器
linux·运维·ubuntu
ONE_SIX_MIX1 小时前
ubuntu 24.04 用rdp连接,桌面黑屏问题,解决
linux·运维·ubuntu
龙飞051 小时前
Systemd -systemctl - journalctl 速查表:服务管理 + 日志排障
linux·运维·前端·chrome·systemctl·journalctl
*小海豚*1 小时前
在linux服务器上DNS正常,但是java应用调用第三方解析域名报错
java·linux·服务器
June`1 小时前
muduo项目排查错误+测试
linux·c++·github·muduo网络库
消失的旧时光-19431 小时前
Linux 编辑器入门:nano 与 vim 的区别与选择指南
linux·运维·服务器
晓13131 小时前
第七章 【C语言篇:文件】 文件全面解析
linux·c语言·开发语言
唐装鼠1 小时前
Linux 下 malloc 内存分配机制详解
linux·malloc