树与哈希:数据结构核心解析

树的基本概念与特性

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

二叉树

  • 定义:每个结点最多有两个子树(左子树和右子树),且子树有严格顺序。
  • 特殊类型 :
    • 斜树:所有结点只有左子树(左斜树)或只有右子树(右斜树)。
    • 满二叉树:所有分支结点均有左右子树,且叶结点在同一层。
    • 完全二叉树:结点位置与同深度的满二叉树编号完全一致。

二叉树的性质

  1. 第i层最多有 (2^{i-1}) 个结点(i≥1)。
  2. 深度为k的二叉树至多有 (2^k - 1) 个结点(k≥1)。
  3. 叶子结点数 (n_0) 与度为2的结点数 (n_2) 满足 (n_0 = n_2 + 1)。
  4. 完全二叉树的深度为 (\left\lfloor \log_2 n \right\rfloor + 1)。

树的遍历

  • 层序遍历:按层级从上到下、从左到右访问。
  • 深度优先遍历 :
    • 前序:根 → 左 → 右。
    • 中序:左 → 根 → 右。
    • 后序:左 → 右 → 根。

哈希(Hash)技术

  • 核心思想:通过哈希函数 (f(key)) 将数据映射到固定大小的数组中,实现高效存储与查询(理想时间复杂度O(1))。
  • 哈希函数设计原则 :
    • 计算简单。
    • 分布均匀以减少冲突。
  • 常见哈希函数 :
    • 直接定址法、平方取中法、折叠法、求余法。

哈希冲突解决

  • 冲突定义:不同数据 (key_1 \neq key_2) 但 (f(key_1) = f(key_2))。
  • 解决方法 :
    • 线性探测:顺序查找下一个空闲位置(+1, +2, ...)。
    • 二次探测:交替探测 (±1^2, ±2^2, ...)。
    • 随机探测:通过随机数偏移量定位。

代码示例(哈希表实现片段)

python 复制代码
class HashTable:
    def __init__(self, size):
        self.size = size
        self.table = [None] * size

    def hash_function(self, key):
        return key % self.size  # 简单求余法

    def insert(self, key, value):
        index = self.hash_function(key)
        while self.table[index] is not None:  # 线性探测解决冲突
            index = (index + 1) % self.size
        self.table[index] = (key, value)
相关推荐
dialect_4 小时前
KMP算法
开发语言·c++·算法
reikocao4 小时前
卡尔曼滤波的动态机制:P如何改变融合权重
算法
漂流瓶jz4 小时前
UVA-1612 猜名次 题解答案代码 算法竞赛入门经典第二版
数据结构·算法·题解·排序·aoapc·算法竞赛入门经典
吞下星星的少年·-·5 小时前
Div.2 CF 1130B题(构造,贪心)
算法·贪心·构造
是main不是漫6 小时前
【双指针——移动零】数组划分类题目的入门基石
c++·算法
深圳市快瞳科技有限公司7 小时前
野外鸟类AI识别落地实录:输入适配、结构化输出、去重聚合与置信度分流的工程实践
算法·计算机视觉·鸟类识别·鸟类ai识别·野外鸟类观测·林业调查
专注仿真9 小时前
梯度提升类(XFBoost)算法详解与代码实例
开发语言·人工智能·python·算法·大模型训练·控制算法
小豆庄9 小时前
视频遮罩追踪退场后ID撞号的排查—多目标场景下的失效
opencv·算法·bug·视频·python3.11
Tisfy9 小时前
LeetCode 3882.网格图中最小异或路径:动态规划
算法·leetcode·动态规划
D e re k ZH10 小时前
P5025 [SNOI2017] 炸弹
c++·算法