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

c++数据结构7——二叉树的遍历

二叉树遍历教学:理解三种递归遍历方式

一、二叉树的基本概念

1.二叉树是每个节点最多有两个子节点的树结构,称为:

左子树(left subtree)        右子树(right subtree)

2.五种基本形态:

                                                                     

  1. 空二叉树            只有根节点         只有左子树                只有右子树            完整的左右子树

二、二叉树的三种递归遍历

核心区别在于访问根节点的时机

遍历方式访问顺序记忆口诀
先序遍历根 → 左 → 右根左右
中序遍历左 → 根 → 右左根右
后序遍历左 → 右 → 根左右根
1. 先序遍历(Pre-order)

访问顺序:根节点 → 左子树 → 右子树

void preOrderTravl(int root) {if(root == 0) return;  // 递归终止条件cout << tree[root].v << " ";  // 1. 访问根preOrderTravl(tree[root].left);  // 2. 遍历左子树preOrderTravl(tree[root].right); // 3. 遍历右子树
}

示例
输入树:

    A/ \B   C/ \   \
D   E   F/ \   /G   H I

输出:A B D E G H C F I

2. 中序遍历(In-order)

访问顺序:左子树 → 根节点 → 右子树

void inOrderTravl(int root) {if(root == 0) return;inOrderTravl(tree[root].left);  // 1. 遍历左子树cout << tree[root].v << " ";    // 2. 访问根inOrderTravl(tree[root].right); // 3. 遍历右子树
}

示例
输入表达式树:

     */   \+     -/ \   / \
a   b c   d

输出:a + b * c - d (中缀表达式)

3. 后序遍历(Post-order)

访问顺序:左子树 → 右子树 → 根节点

void postOrderTravl(int root) {if(root == 0) return;postOrderTravl(tree[root].left);  // 1. 遍历左子树postOrderTravl(tree[root].right); // 2. 遍历右子树cout << tree[root].v << " ";      // 3. 访问根
}

示例
输入表达式树:

     */   \+     -/ \   / \
a   b c   d

输出:a b + c d - * (后缀表达式/逆波兰式)

三、遍历的递归本质

所有遍历都遵循相同的递归框架:

void traverse(int root) {if(root == 0) return; // 递归基// 位置1:先序访问点traverse(左子树);// 位置2:中序访问点traverse(右子树);// 位置3:后序访问点
}
四、遍历的应用场景
遍历方式典型应用场景
先序遍历复制二叉树、前缀表达式
中序遍历二叉搜索树排序、中缀表达式
后序遍历释放二叉树内存、后缀表达式计算
五、思考题

给定二叉树:

    A/ \B   C/   / \
D   E   F

请写出:

  1. 先序结果:A B D C E F

  2. 中序结果:D B A E C F

  3. 后序结果:D B E F C A

相关文章:

  • 从实验室到商用!铁电液晶如何改写显示技术格局?
  • IT Tools 部署
  • 20中数组去重的方法20种数组去重的方法
  • 【数学】求最大公约数问题
  • 贝锐蒲公英工业路由器R300A海外版:支持多国4G频段,全球组网
  • Cadence Allegro中设置主画面最小显示间距
  • JAVA:Kafka 消息可靠性详解与实践样例
  • 常见关系型数据库对比指南
  • 【Linux笔记】Shell-脚本(下)|(常用命令详细版)
  • 利用Python制作环保志愿者招募海报
  • echarts主题切换实现
  • 容器(如 Docker)中,通常不建议运行多个进程或要求进程必须运行在前台
  • 物联网常用协议Modbus、CAN、BACnet介绍
  • 【C语言】指针详解(接)
  • vue发版html 生成打包到docker镜像进行发版
  • 《深度关系-从建立关系到彼此信任》
  • 【android bluetooth 协议分析 02】【bluetooth hal 层详解 6】【bt_vendor_opcode_t 介绍】
  • Ad Hoc
  • 源的企业级网络安全检测工具Prism X(棱镜X)
  • flutter项目迁移空安全
  • 医疗器械类网站icp备案前置审批/推广软文300字范文
  • 西安营销型网站建设动力无限/最新国际新闻 大事件
  • 肇庆网站建设推广/seo查询在线
  • 企业网站的类型有哪些/我要登录百度
  • 网站个人备案百度推官/举例说明seo
  • 怎么用java做动态网站/网络营销常用的工具和方法