当前位置: 首页 > news >正文

数据结构 二叉树理论、递归理论与快速排序理论 6.19

前言

        由于今天的理论内容及其之多,加上自己希望早点睡觉,所以今天的博客将主要讲述理论,具体的代码实现会放在明天的博客中。

概述

        1.手写笔记

        2.数据结构与算法理论

1.手写笔记

2.数据结构与算法理论

1. 树与递归算法
  • 树的定义
    树是一种递归定义的数据结构(max递归深度为4),由多个子树或森林组成。
  • 树的结构
    • 可由多个数组或森林表示
    • 核心操作基于递归实现
2. 二叉树
  • 性质

    • 第 n 层最多有 2^(n-1) 个节点
    • 完全二叉树的节点排列遵循特定规则
  • 二叉树的类型

    类型说明
    满二叉树所有层节点数均达最大值
    完全二叉树除最后一层外完全填充,最后一层从左向右填充
  • 遍历方法

    前序遍历:根 → 左 → 右  (ABDEC)
    中序遍历:左 → 根 → 右  (DEEAC)
    后序遍历:左 → 右 → 根  (DEECA)
    层次遍历:自上而下逐层遍历
  • 创建代码

    typedef struct tree_node {char data;struct tree_node* lchild;struct tree_node* rchild;
    } tree_node, *tree_p;tree_p create_tree() {char data;scanf("%c", &data);if(data == '#') return NULL;tree_p T = create_node(data);T->lchild = create_tree();T->rchild = create_tree();return T;
    }
3. 递归原理
// 基础形式
f(0) = C;
if(终止条件) return C;
f(n) = F[f(n-1)];
return F[f(n-1)];
  • 实现要点

    void func(...) {if(终止条件) return;// 执行体func(参数); // 递归调用
    }
4. 核心算法实现
  • 折半查找(二分查找)​

    while (end > start) {int mid = (start + end) / 2;if(arr[mid] > key) end = mid - 1;else if(arr[mid] < key) start = mid + 1;else return mid; // 找到目标
    }
  • 快速排序

    // 分区函数
    int partition(int* arr, int low, int high) {int base = arr[low];int left = low + 1, right = high;while(left <= right) {while(left <= right && arr[left] <= base) left++;while(left <= right && arr[right] > base) right--;if(left < right) swap(&arr[left], &arr[right]);}swap(&arr[low], &arr[right]);return right;
    }// 主函数
    void quicksort(int* arr, int low, int high) {if(low >= high) return;int mid = partition(arr, low, high);quicksort(arr, low, mid - 1);quicksort(arr, mid + 1, high);
    }
  • 插入排序

    void insert_sort(int* arr, int len) {for(int i = 1; i < len; i++) {int temp = arr[i];int j = i;while(j > 0 && arr[j-1] > temp) {arr[j] = arr[j-1];j--;}arr[j] = temp;}
    }
5. 理论基础
  • 算法定义

    "算法 = 数据结构 + 计算方法"
    程序 = 数据结构 + 算法

  • 时间复杂度

    T(n) = O(f(n))  
    常见复杂度:  
    • O(1)   常数阶  
    • O(n)   线性阶  
    • O(n²)  平方阶  
    • O(nk)  多项式阶

图示说明

  1. 树形结构示意图(含A/B/C节点关系)
  2. 二叉树遍历路径示意图
  3. 递归调用栈示意图

注意事项

  • 遍历本质:"第几次访问"决定了遍历类型
  • 二叉树本质是"度为2的树"
  • 深度优先遍历包含前/中/后序遍历
  • 层次遍历即广度优先遍历

结语

        快速排序较为复杂,需要一定的逻辑能力。

http://www.lryc.cn/news/572284.html

相关文章:

  • 01.线性代数是如何将复杂的数据结构转化为可计算的数学问题,这个过程是如何进行的
  • OpenAI的Prompt工程
  • 03.自动特征提取(深度学习)核心逻辑:通过多层非线性变换,让模型自动学习从原始数据到高层特征的映射。为什么多层非线性变换可以达到这样的效果?
  • 【LINUX网络】网络socet接口的基本使用以及实现简易UDP通信
  • Linux内存进阶
  • 七彩喜智慧康养平台:重构银发生活的数字守护网
  • LeetCode 2187.完成旅途的最少时间
  • 数据库连接池(Druid、HikariCP)详解
  • vector模拟实现中的迭代器失效问题
  • SQL等价改写优化
  • 算法打卡22天
  • Codeforces Round 1032 (Div. 3)
  • Excel学习01
  • Arduino入门教程:11、直流步进驱动
  • 小型语言模型(SLMs)有望重塑自主AI:效率、成本与实际部署
  • tensor向量按任意维度进行切片、拆分、组合
  • 如何将缓存存到客户端浏览器上呢
  • 计算机视觉(Computer Vision, CV)
  • 前端实现即时通讯:短轮询、长轮询、SSE 与 WebSocket 全面解析
  • MySQL层级查询实战:无函数实现部门父路径
  • MyBatis 简介
  • 《超级处理器》怎么安装到WPS/excel(最后有下载地址)
  • 基于Spring Boot+Vue的“暖寓”宿舍管理系统设计与实现(源码及文档)
  • 解锁身心密码:从“心”拥抱健康生活
  • 20250619在Ubuntu20.04.6下编译Rockchip瑞芯微原厂的RK3576的Buildroot系统
  • Zephyr boot
  • Three.js WebGL2.0深度应用:解锁图形渲染新极限
  • 母线槽接头过热隐患难防?在线测温方案实时守护电力安全
  • 408第二季 - 组成原理 - 指令的寻址方式
  • 攻防演练:1.木马后门文件演练