当前位置: 首页 > 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.dtcms.com/a/254594.html

相关文章:

  • 零基础指南:利用Cpolar内网穿透实现Synology Drive多端笔记同步
  • JVM(6)——详解标记-清除算法
  • 《李沐读论文》系列笔记【更新中】
  • Three.js WebGL2.0深度应用:解锁图形渲染新极限
  • 【图表示例】元素-组合
  • HashMap算法高级应用实战:频率类子数组问题的5种破解模式
  • 【Java并发】线程池
  • 191. 位1的个数
  • Python爬虫(七):PySpider 一个强大的 Python 爬虫框架
  • 通俗解释:编码器与解码器
  • Cursor Pro取消500次请求限制,无限用的体验更好了吗?
  • ntkrnlmp!_SHARED_CACHE_MAP结构中的成员DirtyPages=0x6(5)的一个例子和成员BcbList链表节点的数量一致
  • Git版本控制详细资料
  • MATLAB实现Gardner位同步算法
  • Docker 镜像与容器的区别
  • ROS学习之服务通信
  • Android11 Settings详解
  • 【统计术语】
  • Dart 类型系统与 GetX 类型写法完整指南
  • yarn create vite报错:文件名、目录名或卷标语法不正确。 error Command failed.
  • 【嵌入式】鲁班猫玩法大全
  • E结构体基础.go
  • 01.线性代数是如何将复杂的数据结构转化为可计算的数学问题,这个过程是如何进行的
  • FPGA基础 -- Verilog 结构建模之端口的不同位宽处理机制
  • flink如何基于Pekko实现RPC调用
  • openKylin适配RISC-V高性能服务器芯片,携手睿思芯科共拓智算新蓝海
  • ROS学习之动作通信
  • LangChain4j入门学习项目
  • 解决Vue再浏览器的控制台中更新属性不生效
  • Zephyr boot