【暂无】 二叉树 根据遍历结果建立二叉树(build-tree.cpp)
2016-10-02 11:45
691 查看
根据两种遍历顺序确定树结构(build-tree)
题目描述
输入
第1行:二叉树的前序遍历顺序第2行:中序遍历顺序
输出
二叉树的后序遍历顺序
样例输入
ABCDEFGH
CBEDAGHF
样例输出
CEDBHGFA
初次看到这道题,表示我一脸懵逼——这太难了吧!在纸上模拟都很困难!不过,仔细一想也没什么,先序遍历的第一个字母A就是整棵树的根节点,在中序遍历中把树分成两半,左边是左子树,右边是右子树,然后字母B又是左子树的根节点,字母C又是左子树的左子树的根节点……这样递归分成两半(左子树和右子树)即可,但是由于是字母,必须用结构体数组保存坐标,还需要放在合适的位置,需要细细的思考,那么以下就是AC代码啦:
题目描述
输入
第1行:二叉树的前序遍历顺序第2行:中序遍历顺序
输出
二叉树的后序遍历顺序
样例输入
ABCDEFGH
CBEDAGHF
样例输出
CEDBHGFA
初次看到这道题,表示我一脸懵逼——这太难了吧!在纸上模拟都很困难!不过,仔细一想也没什么,先序遍历的第一个字母A就是整棵树的根节点,在中序遍历中把树分成两半,左边是左子树,右边是右子树,然后字母B又是左子树的根节点,字母C又是左子树的左子树的根节点……这样递归分成两半(左子树和右子树)即可,但是由于是字母,必须用结构体数组保存坐标,还需要放在合适的位置,需要细细的思考,那么以下就是AC代码啦:
#include<cstdio> #include<cstring> using namespace std; struct Tree { int f; int l,r; }t[505]; char x[505]; char z[505]; int len,k; int find(int le,int ri) { int u=k; if(le>ri) { return 0; } for(int i=le;i<=ri;i++) { if(z[i]==x[u]) { k++; int q=find(le,i-1),h=find(i+1,ri); t[u].l=q; t[u].r=h; t[q].f=u; t[h].f=u; } } return u; } void back(int y) { if(t[y].l) { back(t[y].l); } if(t[y].r) { back(t[y].r); } printf("%c",x[y]); } int main() { //freopen("build-tree.in","r",stdin); //freopen("build-tree.out","w",stdout); scanf("%s %s",x,z); len=strlen(x); find(0,len-1); back(0); }
相关文章推荐
- 【二叉树】根据两种遍历顺序确定树结构(build-tree)
- 根据前序和中序遍历的结果建立二叉树
- 二叉树的建立(根据遍历结果构建)、遍历(非递归)和搜索
- 【暂无】二叉树 二叉树的三种遍历(binary-tree.cpp)
- 根据先序遍历和中序遍历建立二叉树
- LeetCode: 106_Construct Binary Tree from Inorder and Postorder Traversal | 根据中序和后序遍历构建二叉树 | Medium
- 根据二叉树前序/中序结果,建立二叉树
- 编程之美--根据遍历结果重建二叉树
- 重建二叉树(根据前序和中序遍历结果)
- 【暂无】 二叉树 二叉树的计数(count-tree.cpp)
- 根据遍历结果,构造二叉树
- 【数据结构与算法】根据遍历结果构建二叉树
- 根据先序和中序遍历结果画出二叉树
- LeetCode 105. Construct Binary Tree from Preorder and Inorder Traversal (用先序和中序树遍历来建立二叉树)
- 根据前序和中序遍历结果重建二叉树
- 二叉树——根据遍历结果,画出对应的二叉树 转载至:http://canlynet.blog.163.com/blog/static/255013652009112602449178/
- 数据结构--java实现二叉树的先序、中序、后序、层次遍历及根据先序中序建立二叉树
- 根据层次遍历和中序遍历的结果还原一颗二叉树
- 【二叉树1】根据前序和中序遍历建立一棵二叉树
- 根据二叉树的先序遍历和中序遍历建立二叉树