题目描述

输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并输出它的后序遍历序列。(测试用例中,"树"的输出形式类似于树的层次遍历,没有节点的用#来代替)

除了一些编译错误,一遍AC了,真是爽。由于树本身就是递归定义的,因此关于树的题目大部分都可以用递归来做。这道题是重建二叉树,怎么考虑递归呢?其实很简单,考虑根是谁?左孩子是谁?右孩子是谁?代码如下:

/**
* Definition for binary tree
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
TreeNode* reConstructBinaryTree(vector<int> pre,vector<int> in) {
TreeNode *root;
return reConstructBinaryTree_help(pre, in);
} private:
TreeNode* reConstructBinaryTree_help(const vector<int> pre, const vector<int> in) {
if (in.empty()) {
return NULL;
}
TreeNode *root = new TreeNode(pre[0]); // 处理中序遍历的vector
vector<int>::const_iterator itr = find(in.cbegin(), in.cend(), pre[0]);
vector<int> leftIn(in.cbegin(), itr);
vector<int> rightIn(itr + 1, in.cend()); // 处理前序遍历的vector
int leftPreSize = leftIn.size();
vector<int> leftPre(pre.cbegin() + 1, pre.cbegin() + leftPreSize + 1);
vector<int> rightPre(pre.cbegin() + leftPreSize + 1, pre.cend()); // 递归
root->left = reConstructBinaryTree_help(leftPre, leftIn);
root->right = reConstructBinaryTree_help(rightPre, rightIn); return root; }
};

最新文章

  1. zendstudio快捷键收录
  2. 圣诞老人去哪?Power BI告诉你
  3. 关于Reapter多重嵌套的详细补充
  4. 通过firefox+ProxySelector+dtunnel_lite实现代理上网
  5. if-else的优化举例
  6. CSS jQuery HTML5 CSS3
  7. Java里的IO流里的FileReader里的BufferedReader读取并在前打印行数!
  8. Jumony Core 3,真正的HTML引擎
  9. js数据显示在文本框中(页面加载显示和按钮触动显示)
  10. C语言可变參函数的实现
  11. Unity接入Steamworks
  12. nodejs中function*、yield和Promise的示例
  13. 关于log4j:WARN No appenders could be found for logger (org.apache.hadoop.metrics2.lib.MutableMetricsFactory).的问题
  14. orika实现对象复制
  15. js同时获取多个同name的input框的值
  16. jenkins slave 安装服务与卸载
  17. angular5 组件之间监听传值变化
  18. Android Studio 怎样打开两个项目?
  19. vagrant简单学习使用
  20. Berland National Library

热门文章

  1. 如何查看xmtb项目接口
  2. Netty 源码 Channel(一)概述
  3. 2017/2/12:springMVC的简单文件上传跟拦截器
  4. 【51NOD】1006 最长公共子序列Lcs(动态规划)
  5. ThinkPHP getBy动态查询
  6. Linux---CentOS 定时运行脚本配置
  7. 2018.12.22 bzoj3277: 串(后缀自动机+启发式合并)
  8. 2018.12.22 bzoj3473: 字符串(后缀自动机+启发式合并)
  9. boost-数据类型之auto、any、tuple、variant
  10. mfc标题栏 菜单 退出 关机 重启