标签:
对于一棵二叉树T,我们可以递归定义它的先序遍历,中序遍历,后序遍历:1、先序遍历 ( PreOrder(T) = T的根节点 + PreOrder(T的左子树) + PreOrder(T的右子树) )
2、中序遍历 ( InOrder(T) = InOrder(T的左子树) + T的根节点 + InOrder(T的右子树) )
3、后序遍历 ( PostOrder(T) = PostOrder(T的左子树) + PostOrder(T的右子树) + T的根节点 )
其中,加号表示字符串连接运算。例如,如图所示的二叉树,先序遍历为 DBACEGF ,中序遍历为 ABCDEFG
(画的略丑,请勿嫌弃)
要求:输入一棵树的先序遍历和中序遍历,输出他的后序遍历
样例输入:
DBACEGF ABCDEFG
BCAD CBAD
样例输出:
ACBFGED
CDAB
代码:
#include <stdio.h> #include <string.h> #define MAXN 1000 + 10 void build(int n, char *s1, char *s2, char *s){ if(n <= 0) return ; int p = strchr(s2,s1[0]) - s2; //找到根节点在中序遍历中的位置 build(p,s1+1,s2,s); //递归构造左子树的后序遍历 build(n-p-1, s1+p+1,s2+p+1,s+p); //构造右子树的后序遍历 s[n-1] = s1[0]; } int main(){ char s1[MAXN],s2[MAXN],ans[MAXN]; while(scanf("%s%s",s1,s2)==2){ int nLen = strlen(s1); build(nLen,s1,s2,ans); ans[nLen] = '\0'; puts(ans); } return 0; }
通过这个示例,相信对与二叉树的遍历方式有了一定的了解吧,不知道你们有没有,反正我是有。
传送门:二叉树层次遍历
标签:
原文地址:http://blog.csdn.net/luomingjun12315/article/details/45217243