数据结构,二叉树,前中后序遍历

二叉树的种类

最优二叉树

最优二叉树画法

  1. 排序
  2. 取最小两个值和,得到新值加入排序
  3. 重复1,2

前序、中序和后序遍历是树形数据结构(如二叉树)中常用的遍历方式,用于按照特定顺序遍历树的节点。这些遍历方式在不同应用中有不同的用途。

以下是这些遍历方式的解释:

  1. 前序遍历(Preorder Traversal):
  • 从根节点开始,按照「根节点 - 左子树 - 右子树」的顺序遍历树的节点。

  • 对于每个节点,先访问该节点,然后递归遍历左子树,最后递归遍历右子树。

  • 前序遍历可以用于复制整棵树。

函数方法:

cpp 复制代码
void PREORDER(bitree *r)
{
    if(r==NULL) return;//空树返回
    printf("%c",r->data); //先访问当前节点
    PREORDER(r->lchild);   //再访问该节点的左子树
    PREORDER(r->rchild);   //最后访问该节点右子树
}

图像法: 看穿过环的顺序,确定前序遍历的顺序。

  1. 中序遍历(Inorder Traversal):
  • 从根节点开始,按照「左子树 - 根节点 - 右子树」的顺序遍历树的节点。

  • 对于每个节点,先递归遍历左子树,然后访问该节点,最后递归遍历右子树。

  • 中序遍历在二叉搜索树中得到的结果是有序的。

cpp 复制代码
void INORDER(bitree *r)
{
    if(r==NULL) return;//空树返回
    INORDER(r->lchild);   //先访问该节点的左子树
    printf("%c",r->data); //再访问当前节点
    INORDER(r->rchild);   //最后访问该节点右子树
}

图像法: 看穿过环的顺序,确定中序遍历的顺序。

  1. 后序遍历(Postorder Traversal):
  • 从根节点开始,按照「左子树 - 右子树 - 根节点」的顺序遍历树的节点。

  • 对于每个节点,先递归遍历左子树,然后递归遍历右子树,最后访问该节点。

  • 后序遍历常用于内存回收或资源释放等操作。

cpp 复制代码
void POSTORDER(bitree *r)
{
    if(r==NULL) return;//空树返回
    POSTORDER(r->lchild);   //先访问该节点的左子树
    POSTORDER(r->rchild);   //最后访问该节点右子树
    printf("%c",r->data); //再访问当前节点
    
}

图像法: 看穿过环的顺序,确定后序遍历的顺序。

这些遍历方式都是深度优先遍历(Depth-First Traversal)的一种。深度优先遍历从根节点开始,尽可能深地访问树的分支,然后再回溯到其他分支。与之相对的是广度优先遍历(Breadth-First Traversal),它从根节点开始,按层级遍历树的节点。

相关推荐
兰令水2 小时前
hot100【acm版】【2026.7.14打卡-java版本】
java·数据结构·算法·leetcode·面试
cpp_25012 小时前
P10098 [ROIR 2023] 地铁建设 (Day 2)
数据结构·c++·算法·贪心·二分答案·洛谷题解
米尔的可达鸭5 小时前
深入操作系统 Socket 底层:套接字控制块、FD映射、阻塞IO核心完整实现
arm开发·数据结构·websocket·网络协议·算法·架构·安全架构
tachibana25 小时前
hot100 课程表(207)
java·数据结构·算法·leetcode
Frostnova丶6 小时前
(15)LeetCode 189. 轮转数组
数据结构·算法·leetcode
来一碗刘肉面8 小时前
顺序表的按值查找
数据结构·c++·算法
延凡科技8 小时前
延凡科技 - 发生器设备管理控制系统:AI 驱动的全生命周期智能管控方案
大数据·数据结构·人工智能·算法
小肝一下9 小时前
2. 顺序表和链表
c语言·数据结构·c++·链表·dijkstra·依蕾娜·香香的依蕾娜
j7~9 小时前
【数据结构初阶】带头双向循环链表 (DSList) --增删查改完整实现详解
c语言·数据结构·链表·带头双向循环链表
石像鬼₧魂石9 小时前
贵州商会管理系统 —— 商协会数字化运营一站式平台
大数据·数据结构·物联网·eclipse·数据库架构