题目描述
二叉树的前序、中序、后序遍历的定义:
前序遍历:对任一子树,先访问跟,然后遍历其左子树,最后遍历其右子树;
中序遍历:对任一子树,先遍历其左子树,然后访问根,最后遍历其右子树;
后序遍历:对任一子树,先遍历其左子树,然后遍历其右子树,最后访问根。
给定一棵二叉树的前序遍历和中序遍历,求其后序遍历(提示:给定前序遍历与中序遍历能够唯一确定后序遍历)。

输入
两个字符串,其长度n均小于等于26。
第一行为前序遍历,第二行为中序遍历。
二叉树中的结点名称以大写字母表示:A,B,C…最多26个结点。

输出
输入样例可能有多组,对于每组测试样例,
输出一行,为后序遍历的字符串。

样例输入
ABC
CBA
ABCDEFG
DCBAEFG
样例输出
CBA
DCBGFEA

分析:只要建好树,那么对这个树进行后序遍历是比较简单,套用递归就好。
关键点就是如何建树。

代码如下:

#include<bits/stdc++.h>
using namespace std;
struct node{char value;node *l,*r;node(char a){value=a;l=NULL;r=NULL;}//node(char value='a',node *l=NULL,node *r=NULL):value(value),l(l),r(r){}
};
char pre[30],in[30],post[30];//先序、中序、后序
int k;
void buildtree(int l,int r,int &t,node* &root){//关键点:1、t的前面要打上引用符号&//2、root前要打上引用符号&int flag=0;for(int i=l;i<=r;++i)if(in[i]==pre[t]){//找到中序遍历的根结点//在中序遍历中,根结点的左边就是左子树,右边就是右子树,继续递归下去flag=i;break;}if(!flag)return;//没有找到直接退回t++;root=new node(in[flag]);if(flag>l)buildtree(l,flag-1,t,root->l);if(flag<r)buildtree(flag+1,r,t,root->r);
}
void postorder(node *root){if(root!=NULL){//为空就不进行遍历postorder(root->l);postorder(root->r);post[k++]=root->value;}
}
int main(){while(~scanf("%s%s",pre+1,in+1)){node *root;int n=strlen(pre+1);int t=1;buildtree(1,n,t,root);k=1;postorder(root);printf("%s\n",post+1);memset(pre,0,sizeof(pre));memset(in,0,sizeof(in));memset(post,0,sizeof(post));//记得要进行清空操作}
}

HNUCM 1284:二叉树遍历相关推荐

  1. python实现二叉树遍历(前序遍历、中序遍历、后序遍历)

    python实现二叉树遍历(前序遍历.中序遍历.后序遍历) 在计算机科学中,二叉树是一种树数据结构,其中每个节点最多有两个子节点,称为左子节点和右子节点.使用集合理论概念的递归定义是(非空)二叉树是元 ...

  2. 数据结构之二叉树(遍历、建立、深度)

    数据结构之二叉树(遍历.建立.深度) 1.二叉树的深度遍历 二叉树的遍历是指从根结点出发,按照某种次序依次访问二叉树的所有结点,使得每个结点被访问一次且仅被访问一次. 对于二叉树的深度遍历,有前序遍历 ...

  3. C#二叉树遍历算法实现浅析

    C#算法实现了二叉树的定义,怎么构造一颗已知的二叉树,用几种常规的算法(先序,中序,后序,层次)进行C#二叉树遍历.希望能给有需要人带来帮助,也希望能得到大家的指点.有关C#数据结构的书在书店里找到, ...

  4. 【关于封装的那些事】 缺失封装 【关于封装的那些事】 泄露的封装 【关于封装的那些事】 不充分的封装 【图解数据结构】二叉查找树 【图解数据结构】 二叉树遍历...

    [关于封装的那些事] 缺失封装 目录 - 缺失封装 为什么不能缺失封装? 缺失封装潜在的原因 未意识到关注点会不断变化 混合关注点 幼稚的设计决策 示例分析一 示例分析二 总结 缺失封装 没有将实现变 ...

  5. BinaryTreeTraversal(二叉树遍历)

    二叉树遍历 遍历命名 根据访问结点操作发生位置命名: ① NLR:前序遍历(Preorder Traversal 亦称(先序遍历)) --访问根结点的操作发生在遍历其左右子树之前. ② LNR:中序遍 ...

  6. l2-004 这是二叉搜索树吗?_LeetCode 例题精讲 | 11 二叉树转化为链表:二叉树遍历中的相邻结点...

    本期例题: LeetCode 98. Validate Binary Search Tree 验证二叉搜索树(Medium) LeetCode 426. Convert Binary Tree to ...

  7. 数据结构源码笔记(C语言):二叉树遍历

    //二叉树遍历 #include<stdio.h> #include<malloc.h> #include<malloc.h> #define MaxSize 10 ...

  8. 第九周项目实践3 利用二叉树遍历思想解决问题

    *Copyright (c)2017,烟台大学计算机与控制工程学院 *All rights reserved. *文件名称: *作 者:邵雪源 *完成日期:2017年11月2日 *版 本 号:v1.0 ...

  9. 九度oj 题目1078:二叉树遍历

    题目1078:二叉树遍历 时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:5326 解决:3174 题目描述: 二叉树的前序.中序.后序遍历的定义: 前序遍历:对任一子树,先访问跟,然后遍历 ...

  10. 二叉树遍历算法的六种c语言实现 递归与非递归

    二叉树遍历分为三种: 先序遍历:先访问根结点,其次左节点,最后右节点 中序遍历:先访问左结点,其次跟节点,最后右节点 后序遍历:先访问左结点,其次右节点,最后根节点 三种遍历的递归算法实现形式类似,仅 ...

最新文章

  1. ubuntukylin-14.04.2-desktop-amd64中python2.7版本安装机器学习库
  2. 什么?强化学习竟然来源于心理学?
  3. Javascript中的自执行匿名函数
  4. python找不到tushare_python tushare安装
  5. map has no len python3
  6. getCacheDir用法
  7. php -- PDO事务处理
  8. AT3949-[AGC022D]Shopping【贪心】
  9. UI设计素材干货|日历也要设计,模板都给你们整理好了
  10. 用express搭建网站
  11. 苹果ll是什么版本_如何鉴别自己的iPhone手机,是什么版本呢?国行,美版,还是韩版?...
  12. 飙泪怀旧:那些经典的老软件、老网站
  13. 手动开启O2, O3优化
  14. NVIDIA发布移动超级计算机“Jetson TK1”性能超树莓派
  15. Android:加载网图时精确获取图片格式
  16. uTorrent设置,防止出现磁盘负荷100%
  17. 地级市空气污染、空气质量、PM2.5日度数据
  18. Java引用包的方法
  19. MemoryStream 的一些用法
  20. python搭建PyDev详细版

热门文章

  1. APMServ5.2.6win10系统Apache、MySQL5.1启动失败解决办法
  2. java volatile 和Transient 关键字
  3. Shell脚本之awk详解
  4. 网络人“时间都去哪儿了”
  5. rails logger 和 session, cookies, request方面的笔记
  6. 黑马程序员之《String Buffer,包装类》
  7. windows 8 Skydrive
  8. SQLHelp sql数据库的DAL
  9. CCNP学习笔记第一周
  10. 直观而简单的解决方案--软件设计的永恒追求