poj 2255 二叉树 已知先序和中序,求后序
2012-08-09 16:46
260 查看
题目大意:已知二叉树的先序和中序排列,要你求它的后序
解题思路:水题,根据二叉树的性质,递归求解,
DBACEGF ABCDEFG
D为二叉树的根节点, BAC, ABC为以D为根结点的左子树的先序和中序排列,EGF,EFG为以D为根结点的右子树的先序和中序排列。然后递归求解
解题思路:水题,根据二叉树的性质,递归求解,
DBACEGF ABCDEFG
D为二叉树的根节点, BAC, ABC为以D为根结点的左子树的先序和中序排列,EGF,EFG为以D为根结点的右子树的先序和中序排列。然后递归求解
#include <iostream> #include <cstdio> #include <cstring> using namespace std; const int maxn = 30; void postOrder(char *pre, int plen, char *in, int ilen); int main() { char preOrder[maxn], inOrder[maxn]; int prelen, inlen; while(scanf("%s", preOrder) != EOF) { scanf("%s", inOrder); prelen = strlen(preOrder); inlen = strlen(inOrder); postOrder(preOrder, prelen, inOrder, inlen); printf("\n"); } return 0; } void postOrder(char *preorder, int plen, char *inorder, int ilen) { char *pre = preorder; char *in = inorder; if(plen == 0) return; for(int i = 0; i < ilen; i++, in++) { if(*pre == *in) break; } int l, r; l = in - inorder; r = ilen - l - 1; postOrder(preorder + 1, l, inorder, l);//左子树 postOrder(preorder + 1 + l, r, in + 1, r);//右子树 printf("%c", *preorder); }
相关文章推荐
- ACM--二叉树-已知前中序求后序--POJ-2255
- poj 2255 二叉树的后序遍历
- poj 2255 Tree Recovery (二叉树的顺序遍历)
- POJ2255,Tree Recovery,二叉树重建
- A - Tree Recovery POJ - 2255 (二叉树)
- POJ 2255 Tree Recovery && Ulm Local 1997 Tree Recovery (二叉树的前中后序遍历)
- POJ 2255 Tree Recovery 二叉树的遍历
- poj 2255 Tree Recovery(二叉树的遍历)
- 【POJ 2255 Tree Recovery】+ 二叉树
- 【二叉树】POJ 2255
- POJ 2255 Tree Recovery ( 二叉树)
- POJ 2255 Tree Recovery 二叉树的遍历
- POJ 2255 根据二叉树的前序和中序序列来重建二叉树
- POJ 2255 二叉树由前序遍历中序遍历得到后序遍历
- POJ 2255 Tree Recovery [二叉树]
- POJ 2255/hrbust 2022 Tree Recovery【dfs、二叉树的层次遍历】
- POJ 2255 Tree Recovery(二叉树重建)
- poj 2255 Tree Recovery,已知前序中序求后序
- POJ 2255 Tree Recovery 二叉树恢复
- 通过遍历求解二叉树结构poj2255