先序遍历:根 左 右

中序遍历:左 根 右

后序遍历:左 右 根

我们可以先从先序遍历中找到根节点,由于知道了根节点那么可以依靠中序遍历找到左子树,右子树。这样再去先序遍历中找到左子树的根节点,然后再依靠中序遍历找到左子树的左子树(右子树同理)。这样层层递归就能还原二叉树。之后求出后序遍历。

感谢原博主http://www.cnblogs.com/rain-lei/p/3576796.html 一开始递归不会写,看了博主的发现其实很简单。注意还原二叉树时return root。

#include<stdio.h>
int n;
typedef struct btnode{int data;struct btnode *left;struct btnode *right;
}treenode;                  //定义二叉树节点
int preorder[1001];            //先序遍历
int inorder[1001];            //中序遍历  treenode *gettree(int prel,int prer,int inl,int inr){   //根据先序中序还原二叉树if(prel>prer)return NULL;treenode *root;     root=new treenode;root->data=preorder[prel];if(prel==prer){root->left=NULL;root->right=NULL;return root;}int temp;  //记录根节点在中序遍历中的位置for(int i=1;i<=inr;i++)if(inorder[i]==preorder[prel]){temp=i;break;}root->left=gettree(prel+1,prel+(temp-inl),inl,temp-1); //还原左子树root->right=gettree(prel+(temp-inl)+1,prer,temp+1,inr);//还原右子树return root;
}
void postorder(treenode *t){          //后序遍历二叉树if(t!=NULL){postorder(t->left);postorder(t->right);printf("%d\n",t->data);}
}
int main(){scanf("%d",&n);for(int i=1;i<=n;i++)scanf("%d",&preorder[i]);for(int i=1;i<=n;i++)scanf("%d",&inorder[i]);treenode *tree=gettree(1,n,1,n);postorder(tree);
}

转载于:https://www.cnblogs.com/lvcoding/p/6589669.html

二叉树--先序中序遍历求后序遍历相关推荐

  1. 【C++】已知二叉树先序遍历+中序遍历 求后序遍历

    题目:已知二叉树先序遍历+中序遍历 求后序遍历 对于一棵二叉树,给定其先序遍历的结果序列和中序遍历的结果序列,请写出其后序遍历的结果序列. 输入样例: GDAFEMHZ(先序遍历的结果序列) ADEF ...

  2. 二叉树重建(前中序遍历求后序模板刘汝佳小白本)

    输入一棵二叉树的先序遍历和中序遍历序列,输出它的后序遍历序列. 输入: DBACEGF ABCDEFG BCAD CBAD 输出: ACBFGED CDAB #include<stdio.h&g ...

  3. Tree Recovery(二叉树递归遍历+求后序遍历模板)

    题意:已知先序和中序,将后序求出来 Little Valentine liked playing with binary trees very much. Her favorite game was ...

  4. 给出中序和前序求后序Java,已知二叉樹前序,中序遍歷,求后序遍歷,java實現...

    簡單介紹一下思想,先看前序,前序遍歷的第一個節點,就是該樹的根.在中序中找到該根的位置,設為index,在中序遍歷集合中,位於index之前的屬於根的左子樹,位於index之后的屬於根的右子樹.然后, ...

  5. hdu 5444 Elven Postman(根据先序遍历和中序遍历求后序遍历)2015 ACM/ICPC Asia Regional Changchun Online...

    很坑的一道题,读了半天才读懂题,手忙脚乱的写完(套上模板+修改模板),然后RE到死-- 题意: 题面上告诉了我们这是一棵二叉树,然后告诉了我们它的先序遍历,然后,没了--没了! 反复读题,终于在偶然间 ...

  6. 数据结构二叉树遍历求后序

    注意左右子树的递归 参考自https://blog.csdn.net/hou_blog/article/details/50015503

  7. 二叉树的遍历(前序、中序、后序、已知前中序求后序、已知中后序求前序)

    二叉树的遍历(前序.中序.后序.已知前中序求后序.已知中后序求前序)   之前的一篇随笔(二叉树.前序遍历.中序遍历.后序遍历)只对二叉树的遍历进行了笼统的描述,这篇随笔重点对前.中.后序的遍历顺序进 ...

  8. 二叉树已知前序中序求后序(超简单)(java)

    首先解题思路来自b站某高手,思路清奇,请看官先看视频: 无脑秒解!已知先/后序遍历与中序遍历,求后/先序遍历._哔哩哔哩_bilibili大佬轻喷,这个题做很简单,但是想做的快做的准应该没有比这更快的 ...

  9. 2018.7.28 二叉树的遍历规则(前序遍历、后序遍历、中序遍历)

    树的遍历顺序大体分为三种:前序遍历(先根遍历.先序遍历),中序遍历(中根遍历),后序遍历(后根遍历). 前序遍历:前序遍历可以记为根左右,若二叉树为空,则结束返回. 前序遍历的规则:(1)访问根节点( ...

最新文章

  1. 26期20180601目录管理
  2. cron计划任务使用
  3. 变量命名规范 匈牙利 下划线 骆驼 帕斯卡
  4. android界面怎么优化字符串,android应用性能优化
  5. 机器学习知识体系(强烈推荐)
  6. puppet子命令介绍
  7. [PHP] 存储改造中的逻辑和清理遗留的问题
  8. 常见问题_数组索引越界异常
  9. 【简便解法】1084 Broken Keyboard (20 分)_16行代码AC
  10. 【算法】N Queens Problem
  11. zend studio php 5.5,PHP - 下载 - Zend Studio 5.5
  12. chmod递归授权文件夹(用法)
  13. poj 2240 Arbitrage(bellman-ford spfa 判断正环)
  14. php相册上传和删除吗,php如何删除上传图片
  15. openfire 加 spark组建局域网聊天室
  16. c语言屏蔽一段程序,C语言#if 0阻止代码段
  17. ios 设置导航栏背景色
  18. Android5.0+win8双系统平板PK苹果ipad
  19. 深入Java集合ArrayList的源码解析
  20. PrivateKey私匙获取,签名生成

热门文章

  1. 【Qt】Qt程序编译成功,执行时报错:程序异常结束,crashed
  2. 中国大学生创业报告发布
  3. r语言remarkdown展示图_使用R语言包circlize可视化展示blast双序列比对结果
  4. c语言xml序列化,C# XML和实体类之间相互转换(序列化和反序列化)
  5. 白噪音和粉红噪音煲机_白噪音真的有助于睡眠?这款可以自定义的应用给你答案...
  6. Java项目:医院管理系统(java+Springboot+Maven+Mybatis+Vue+Mysql)
  7. linux python2和python3共存_linux-Centos7安装python3并与python2共存
  8. qprocess start怎么判断是否结束_面试结束后,如何判断自己是否有戏?看有无这8大信号!...
  9. 1小时学会:最简单的iOS直播推流(十)librtmp使用介绍
  10. ThinkPHP 5.0 入门教程 一:安装ThinkPHP并在Web浏览器访问