已知前序和中序求后序
来源:互联网 发布:淘宝好评返现模板 编辑:程序博客网 时间:2024/05/22 04:48
假设前序遍历为 adbgcefh, 中序遍历为 dgbaechf
前序遍历是先访问根节点,然后再访问子树的,而中序遍历则先访问左子树再访问根节点
那么把前序的 a 取出来,然后查找 a 在中序遍历中的位置就得到 dgb a echf
那么我们就知道 dgb 是左子树 echf 是右子树,因为数量要吻合
所以前序中相应的 dbg 是左子树 cefh 是右子树 ;
下图为求出的二叉树的图形:
代码如下:
- #include <iostream>
- #include <string>
- using namespace std;
- int find(const string &str, char c)
- {
- for (int i = 0; i < str.size(); ++ i)
- if (c == str[i])
- return i;
- return -1;
- }
- bool PreMid(const string &pre, const string &mid)
- {
- if (pre.size() == 0)
- return false;
- if (pre.size() == 1)
- {
- cout << pre;
- return true;
- }
- //根节点是第一个元素
- int k = find(mid, pre[0]);
- string pretmp = pre.substr(1, k);
- string midtmp = mid.substr(0, k);
- PreMid(pretmp, midtmp);
- pretmp = pre.substr(k + 1, pre.size() - k - 1);
- midtmp = mid.substr(k + 1, mid.size() - k - 1);
- PreMid(pretmp, midtmp);
- //变成后序遍历要最后输出节点的值
- cout << pre[0];
- }
- int main()
- {
- string pre, mid;
- while (cin >> pre >> mid)
- {
- PreMid(pre, mid);
- cout << endl;
- }
- }
- 已知前序和中序求后序
- 已知前序和中序求后序
- 已知前序,中序求后序
- 已知前序和中序求后序与已知中序和后序求前序的算法
- 6.3.3 二叉树重建 已知前序和中序求后序
- 已知树的前序和中序求后序 hdu 题目1710 Binary Tree Traversals
- HDU 1710 二叉树的遍历(已知前序和中序求后序)
- 已知前序和中序递归后序
- 已知前序遍历和中序遍历,求后序遍历
- 已知前序遍历和中序遍历,求后序遍历
- 已知二叉树的前序和中序,求后序
- 已知前序和中序遍历恢复二叉树
- 二叉树遍历:已知前序和中序,求后序
- 已知前序和中序,求后序遍历
- 二叉树:已知前序和中序,求后序
- 已知前序遍历和中序遍历,求后序遍历
- 二叉树 :已知前序和中序,求后序
- 已知前序遍历和中序遍历求后序遍历
- 解决VS2005或2008中新建VC++时的错误
- 准提神咒
- Delphi应用程序的调试(十)调试器选项
- VS2010双击选中或者光标选中代码时频繁崩溃问题
- android电量管理
- 已知前序和中序求后序
- Linux上C语言编程入门
- jQuery选择器分类,总结
- 开发记录2013-03-26
- Android eclipse 程序调试
- 树状数组整理(1.基本原理)
- 如何学好编程
- LoadRunner与JMeter的比较(九)
- 在LoadRunner中监控AIX的性能数据(十)