尊敬的读者您好:笔者很高兴自己的文章能被阅读,但原创与编辑均不易,所以转载请必须注明本文出处并附上本文地址超链接以及博主博客地址:https://blog.csdn.net/vensmallzeng。若觉得本文对您有益处还请帮忙点个赞鼓励一下,笔者在此感谢每一位读者,如需联系笔者,请记下邮箱:zengzenghe@gmail.com,谢谢合作!

最近不论是笔试还是面试,都经常性的遇到这样的问题:“给定某一二叉树的前序遍历与中序遍历,请返回它的后序遍历”,“给定某一二叉树的后序遍历与中序遍历,请返回它的前序遍历”。为了后面不犯错误,下面就来好好总结一下。

一、给定二叉树的前序遍历为“ABCDEFGH”与中序遍历“BDCEAFHG”,请返回它的后序遍历?

前序遍历的原则是“根-左-右”,所以前序遍历的第一个节点必然为根节点,然后在中序遍历找到这个根节点,该根节点的左边即为二叉树的左子树所有节点,右边即为二叉树的右子树所有节点,再分别将前序遍历与中序遍历分别拆成两部分,构成两个子树的前序遍历与中序遍历,即左子树前序:BCDE、中序:BDCE,右子树前序:FGH、中序:FHG,通过递归的方法不断划分下去,最终即可求解。

解题代码如下:

#include<iostream>
#include<string>using namespace std;
//递归实现后序遍历
void findpostorder(string s1,string s2){if(s1.length()==0) return;if(s1.length()==1){printf("%c",s1[0]);return;}//访问索引(从0开始)int pos=s2.find(s1[0]);// 构成左子树的前序遍历与中序遍历findpostorder(s1.substr(1,pos),s2.substr(0,pos));//后序遍历左子树// 构成右子树的前序遍历与中序遍历findpostorder(s1.substr(pos+1,s1.length()-pos-1),s2.substr(pos+1,s2.length()-pos-1));// 此处输出则为前序遍历printf("%c",s1[0]);
}int main(){string s1,s2;while(cin>>s1>>s2){// 输入二叉树的前序遍历与中序遍历findpostorder(s1,s2);printf("\n");}
}

二、给定二叉树的后序遍历为“DECBHGFA”与中序遍历“BDCEAFHG”,请返回它的前序遍历?

#include<iostream>
#include<string>using namespace std;
//递归实现前序遍历
void findpreorder(string s1,string s2){if(s1.length()==0) return;if(s1.length()==1){printf("%c",s1[s1.length()-1]);return;}//访问索引(从0开始)int pos=s2.find(s1[s1.length()-1]);// 此处输出则为前序遍历printf("%c",s1[s1.length()-1]);// 构成左子树的后序遍历与中序遍历findpreorder(s1.substr(0,pos),s2.substr(0,pos));// 构成右子树的后序遍历与中序遍历findpreorder(s1.substr(pos,s1.length()-pos-1),s2.substr(pos+1,s2.length()-pos-1));}int main(){string s1,s2;while(cin>>s1>>s2){// 输入二叉树的后序遍历与中序遍历findpreorder(s1,s2);printf("\n");}
}

日积月累,与君共进,增增小结,未完待续。

关于二叉树前中后序遍历的常见问题相关推荐

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

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

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

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

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

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

  4. 【霍罗维兹数据结构】二叉树前中后序遍历 | 层序遍历 | 复制二叉树 | 判断两个二叉树全等 | 可满足性问题

    写在前面 学习二叉树结构,最简单的方式就是遍历.所谓二叉树遍历,就是按照某种特定的规则,一次对二叉树中的节点进行相应的操作,并且每个节点只操作一次. 访问节点所做的操作要看具体的应用问题.遍历是二叉树 ...

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

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

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

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

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

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

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

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

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

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

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

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

最新文章

  1. NC:遗传发育所Speakman组-棕色脂肪是无菌小鼠改善血糖的关键
  2. 中国深度学习创业的长板在哪里
  3. 通过COS上传文件至腾讯云
  4. 网站计数器 php,网站计数器 php
  5. 电路上的ESR是什么意思?
  6. aws lambda_跑来跑去:假人与AWS Lambda的第一次接触
  7. LightOJ - 1422 (区间DP)
  8. HTTP相关知识的总结
  9. 用SQL产生连续的自然数
  10. DIOCP开源项目-高效稳定的服务端解决方案(DIOCP + 无锁队列 + ZeroMQ + QWorkers) 出炉了
  11. 对矩阵进行QR分解的Matlab代码
  12. sublime text3怎么运行python代码_Sublime Text3配置在可交互环境下运行python快捷键
  13. navicat 中文注册码
  14. steam删除本地的账号信息
  15. 如何成为一名优秀的iOS开发工程师
  16. Safari无法验证网站身份
  17. 常见的VC Link错误
  18. 复辟变后寄友人——李大钊
  19. 简单说说USB协议(一)
  20. vs2013 + QT: release时 提示“无法找到.exe的调试信息 或者调试信息不匹配 未使用调试信息生成二进制文,是否继续调试”

热门文章

  1. 技术可行性分析和经济可行性分析
  2. LeaRun敏捷开发框架快速设计表单
  3. 解决:mongod启动报错缺少libcrypto.so.1.1
  4. 在python中用os模块实现批量移动文件
  5. mastercam西门子840d后处理_MasterCAM对西门子802D后置处理
  6. BLE蓝牙4.0串口调试助手
  7. zedgraph显示最小刻度_ZedGraph显示多条实时曲线
  8. Docker离线安装
  9. 摩斯电码php源码,PHP生成基于文本的摩斯电码
  10. 纯Qt版中国象棋:实现双人对战、人机对战及网络对战