leetcode第一刷_Construct Binary Tree from Inorder and Postorder Traversal
2016-01-16 10:03
344 查看
这道题是为数不多的感觉在读本科的时候见过的问题。
人工构造的过程是如何呢。兴许遍历最后一个节点一定是整棵树的根节点。从中序遍历中查找到这个元素,就能够把树分为两颗子树,这个元素左側的递归构造左子树,右側的递归构造右子树。元素本身分配空间,作为根节点。
于set和map容器不同的是。vector容器不含find的成员函数。应该用stl的库函数,好在返回的也是迭代器,而vector的迭代器之间是能够做减法的。偏移量非常方便的得到。
人工构造的过程是如何呢。兴许遍历最后一个节点一定是整棵树的根节点。从中序遍历中查找到这个元素,就能够把树分为两颗子树,这个元素左側的递归构造左子树,右側的递归构造右子树。元素本身分配空间,作为根节点。
于set和map容器不同的是。vector容器不含find的成员函数。应该用stl的库函数,好在返回的也是迭代器,而vector的迭代器之间是能够做减法的。偏移量非常方便的得到。
TreeNode *buildRec(vector<int> &inorder, int si, vector<int> &postorder, int so, int len){ if(len <= 0) return NULL; TreeNode *root = new TreeNode(postorder[so]); int index = find(inorder.begin(), inorder.end(), postorder[so]) - inorder.begin(); int newlen = index - si; root->left = buildRec(inorder, si, postorder, so-len+newlen, newlen); root->right = buildRec(inorder, index+1, postorder, so-1, len-newlen-1); return root; } class Solution { public: TreeNode *buildTree(vector<int> &inorder, vector<int> &postorder) { return buildRec(inorder, 0, postorder, inorder.size()-1, inorder.size()); } };
相关文章推荐
- magent实现memcache主从
- Isuzu Forward & Isuzu F-Series
- Cocoa框架概览
- Linux 系统应用编程——网络编程(TCP/IP 数据包格式解析)
- (2)获取网页源代码——Python
- 腾讯发布80页重磅报告:哪些行业将被颠覆
- 新手开发android容易出现的错误(不断更新中...)
- I/O多路复用
- 正确理解Python文件读写模式字w+、a+和r+
- ISUZU ELF
- 关于csv格式文件的导入、导出时的身份证号处理
- [项目]简易安全卫士的实现
- SSM框架下实现MyBatis连接查询,一对多和多对一
- 【Java】获取指定HTML 文档指定的body、页中超链接的标题和链接、指定博客文章的内容
- RMI AND CORBA简介——java菜鸟成长记
- hadoop修改hadoop.tmp.dir
- iOS 开发学习之 User Interface(1)APP 生命周期
- qt 状态机弹跳效果
- php 获取数组中的key值
- OC-学习Tips