前中后序遍历的相互转化(附代码)

1.理论部分

首先简单的回顾一下前中后序遍历:

  • 前序遍历:根➡️左➡️右
  • 中序遍历:左➡️根➡️右
  • 后序遍历:左➡️右➡️根

三种遍历的转化规则:

  • ✔️ 已知前序遍历序列和中序遍历序列时,可以确定后序遍历序列
  • ✔️ 已知后序遍历序列和中序遍历序列时,可以确定前序遍历序列
  • ❌ 已知前序遍历序列和后序遍历序列时,中序遍历序列不一定

2.前序+中序 ➡️ 后序

算法题链接

已知中序遍历和前序遍历序列为:

ABEDFCHG
CBADEFGH

大致思路:从左到右遍历前序遍历序列,可以依次得到根节点,然后在中序遍历序列中找到该节点,则该节点左边的都是左子树上的节点,右边的都是右子树上的节点,然后继续递归遍历左子树和右子树即可。

代码如下:

#include<iostream>
#include<string.h>
using namespace std;
#define N 1100
char preOrd[N], inOrd[N];
void postOrd(int root, int l, int r){if(l > r)   return;int newRoot = l;while(newRoot <= r && inOrd[newRoot] != preOrd[root])newRoot++;postOrd(root + 1, l, newRoot - 1);postOrd(root + 1 + newRoot - l, newRoot + 1, r);cout<<preOrd[root];
}
int main(){cin>>inOrd>>preOrd;int length = strlen(preOrd);postOrd(0, 0, length - 1);return 0;
}

3.后序+中序 ➡️ 前序

算法题链接

思路同上,左右子树反过来就可以了

前中后序遍历的相互转化(附代码)相关推荐

  1. LeetCode——树:层次遍历、前中后序遍历

    LeetCode--树:层次遍历.前中后序遍历 目录 层次遍历 二叉树的层平均值 找树左下角的值 前中后序遍历 概述 非递归实现二叉树的前序遍历 非递归实现二叉树的中序遍历 非递归实现二叉树的后序遍历 ...

  2. 二叉树N叉数的前中后序遍历总结,python实现递归法和迭代法

    关于二叉树的前序遍历(preoder).中序遍历(inorder)和后序遍历(postorder),实际上只需要记住:左子节点一定在右子节点的左边(左右),所谓前中后序遍历就是根节点的位置不同,前序是 ...

  3. [Leedcode][JAVA][第94/144/145题][前中后序遍历][递归][迭代][二叉树]

    [问题描述][] 前序遍历 先输出当前结点的数据,再依次遍历输出左结点和右结点 中序遍历 先遍历输出左结点,再输出当前结点的数据,再遍历输出右结点 后续遍历 先遍历输出左结点,再遍历输出右结点,最后输 ...

  4. 二叉树的层序遍历和前中后序遍历代码 迭代/递归

    二叉树的层序遍历和前中后序遍历代码 迭代/递归 只记录代码.思路参考代码随想录:https://github.com/youngyangyang04/leetcode-master/blob/mast ...

  5. 二叉树前中后序遍历的非递归实现以及层次遍历、zig-zag型遍历详解

    前言 二叉树的遍历是一个比较常见的问题,递归实现二叉树的前中后序遍历比较简单,但非递归实现二叉树的前中后序遍历相对有难度.这篇博客将详述如何使用非递归的方式实现二叉树的前中后序遍历,在进行理论描述的同 ...

  6. 二叉树非递归dfs——简单思路搞定前中后序遍历

    前言:相信很多同学都被二叉树非递归dfs的前中后序遍历方法弄的头疼.网上的答案,什么前中后序遍历各有一套写法,还有什么一个栈的写法,两个栈的写法.看起来能理解,一闭眼自己写都记不住.今天介绍一种用一种 ...

  7. 二叉树前中后序遍历+刷题【中】【数据结构/初阶/C语言实现】

    文章目录 1. 二叉树基础操作 1.1 二叉树遍历 1.1.1 前序遍历 前序遍历(Pre-Order Traversal) 1.1.2 中序遍历 中序遍历(In-Order Traversal) 1 ...

  8. python实现二叉树非递归前中后序遍历

    python实现二叉树非递归前中后层序遍历 二叉树是数据结构中重要的一部分,本文简单介绍用python实现二叉树的前中后序遍历,包括递归和非递归思路算法. # -*- 二叉树 begin -*- # ...

  9. 前中后序遍历-java模板代码

    前中后序遍历的知识 1.前序遍历:先遍历根节点,再按照根-左-右的顺序遍历根节点的左子树,最后按照根-左-右的顺序遍历根节点的右子树. 2.中序遍历:先遍历根节点的左子树,按照左-根-右的顺序遍历完之 ...

  10. 二叉树前中后序遍历以及节点计算

    二叉树前中后序遍历以及节点计算 二叉树 分类 二叉链的数据结构 三叉链的数据结构 四种遍历方法 深度优先遍历:前中后序 广度优先遍历:层序遍历 计算 节点个数 叶子节点个数 树的高度 第k层的节点个数 ...

最新文章

  1. R创建分类变量(categorical variable)
  2. ZooKeeper 的典型应用场景
  3. Codeforces 458C - Elections
  4. FreeRTOS任务挂起和恢复
  5. php无法添加数据库,无法添加数据到数据库
  6. Java语言的特点和特性
  7. c语言中scanf输入判断,无法判断某一个输入的字符?scanf()
  8. mysql流程函数if之类
  9. 动态向客户端注册脚本文件
  10. 交换局域网(链路层+以太网+交换机)
  11. python画心形代码大全_七夕 - 程序员表白代码
  12. SIFT/SURF算法
  13. 天津互联网公司和生活成本
  14. 基于Aspect的情感分析
  15. 个人作业 Alpha项目测试
  16. 无法出现 Bandizip 的右键菜单
  17. 荣耀变局之下,国产智能手机九年往事
  18. 2018版ISTQB FL基础级大纲全解析
  19. 山西大同大学计算机分数线,山西大同大学录取分数线2021是多少分(附历年录取分数线)...
  20. Andriod Studio 线性布局(LinearLayout)

热门文章

  1. 隆重推荐:公民税权手册
  2. ecshop全套系统测试用例
  3. 安川焊接机器人做圆弧运动编程_安川机器人示教器编程插补方式详细介绍--安川机器人...
  4. CVE-2020-11946 ManageEngine OpManager 命令执行
  5. LeaRun快速开发平台:企业供应链管理系统解决方案
  6. matlab如何批量去背景,ImageJ怎么消除背景 批量去背景教程
  7. QT制作一个串口调试助手出现乱码问题
  8. 数据结构实验——约瑟夫环
  9. 计算机网络之TCP报文
  10. VS Code unins000尝试在目标目录创建文件时出错