博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
HihoCoder第十周——已知前序中序求后序
阅读量:6247 次
发布时间:2019-06-22

本文共 875 字,大约阅读时间需要 2 分钟。

思路

我们定义post_order(str1, str2)为一棵前序遍历的结果为str1,中序遍历的结果为str2的二叉树的后序遍历的结果。

如果要求解post-order(str1, str2)的话,首先不难发现,根据‘前序遍历’str1=‘根节点’+‘左子树的前序遍历’+‘右子树的前序遍历’,我可以知道这棵二叉树的根节点root便是str1的第一个字符。
在知道了‘根节点’root之后,便可以利用‘中序遍历’str2=‘左子树的中序遍历’+‘根节点’+‘右子树的中序遍历’,求解出‘左子树的中序遍历’str2L和‘右子树的中序遍历’str2R。
由于一棵子树的前序遍历和中序遍历的长度相同,那么仍然是根据‘前序遍历’str1=‘根节点’+‘左子树的前序遍历’+‘右子树的前序遍历’,我可以知道从str1的第2个字符开始的str2L.length()个字符便是‘左子树的前序遍历’str1L,而这之后的部分便是‘右子树的前序遍历’str1R。

实现

#include 
#include
using namespace std;void post(string pre,string mid){ if(pre.length() <= 1){ cout << pre;return; } size_t loc = mid.find(pre[0]); post(pre.substr(1,loc),mid.substr(0,loc)); post(pre.substr(loc+1),mid.substr(loc+1)); cout << pre[0];}int main(){ string pre,mid; cin >> pre >> mid; post(pre,mid); return 0;}

转载于:https://www.cnblogs.com/nickqiao/p/7583330.html

你可能感兴趣的文章
App 卸载记录
查看>>
JavaScript变量和作用域
查看>>
开源SIP服务器加密软件NethidPro升级
查看>>
南京大学周志华教授当选欧洲科学院外籍院士
查看>>
计算机网络与Internet应用
查看>>
linux性能剖析工具
查看>>
Mars说光场(3)— 光场采集
查看>>
Django 文件下载功能
查看>>
xBIM 插入复制功能
查看>>
持续集成简介(转)
查看>>
一行代码让你的TableView动起来-iOS动画
查看>>
AI技术出海 - 阿里云GPU服务器助力旷视勇夺4项世界第一
查看>>
Spring Boot中初始化资源的几种方式
查看>>
通过测试发现的Exchange 2013 CU16存在的一个小bug
查看>>
将桌面文件映射至E盘
查看>>
走红日本 阿里云如何能够赢得海外荣耀
查看>>
入侵CIA和FBI的黑客:可能是一个15岁少年
查看>>
聚焦服务器行业,看美国独立服务器优势
查看>>
高中生开发 Chrome 插件,帮助色盲患者更为清晰的看到网上图片
查看>>
玩笑到现实,大数据涉足文学研究--用数据模型分析莎翁著作
查看>>