106. Construct Binary Tree from Inorder and Postorder Traversal
2016-03-05 11:44
239 查看
这道题难倒是不难,重点在于不引用vector的话,会内存溢出,借鉴一下:
原始版本:
改进版本:
原始版本:
class Solution { public: //copy vec[i,j] vector<int> vectorCopy(vector<int>& vec, int i, int j) { if (i > j) { vector<int> newVec; return newVec; } vector<int> newVec; for (int k = i; k <= j; k++) { newVec.push_back(vec[k]); } return newVec; } TreeNode* buildTree(vector<int>& inorder, vector<int>& postorder) { TreeNode* root; if (inorder.size() == 0) { root = NULL; return root; } else if (inorder.size() == 1) { root = new TreeNode(inorder[0]); return root; } else { root = new TreeNode(postorder[postorder.size() - 1]); } for (int i = 0; i < inorder.size(); i++) { if (inorder[i] == postorder[postorder.size() - 1]) { vector<int> inorderSun = vectorCopy(inorder, 0, i - 1); vector<int> postorderSun = vectorCopy(postorder, 0, i - 1); root->left = buildTree(inorderSun, postorderSun); inorderSun.clear(); postorderSun.clear(); inorderSun = vectorCopy(inorder, i + 1, inorder.size() - 1); postorderSun = vectorCopy(postorder, i + 1, postorder.size() - 1); root->right = buildTree(inorderSun, postorderSun); } } return root; } };
改进版本:
class Solution { public: //[beginIndex, endIndex] TreeNode* buildTree(vector<int>& inorder, vector<int>& postorder, int beginIn, int endIn, int beginPost, int endPost) { TreeNode* root; if (endIn < beginIn) { root = NULL; return root; } else if (endIn == beginIn) { root = new TreeNode(inorder[beginIn]); return root; } else { root = new TreeNode(postorder[endPost]); } for (int i = beginIn; i <= endIn; i++) { if (inorder[i] == postorder[endPost]) { root->left = buildTree(inorder, postorder, beginIn, i - 1, beginPost, beginPost + (i - 1) - beginIn); root->right = buildTree(inorder, postorder, i + 1, endIn, beginPost + (i - 1 - beginIn + 1), endPost - 1); } } return root; } TreeNode* buildTree(vector<int>& inorder, vector<int>& postorder) { return buildTree(inorder, postorder, 0, inorder.size() - 1, 0, postorder.size() - 1); } };
相关文章推荐
- c语言概述
- 第三方库文件ViewPagerIndicator实现由Eclipse到Android Studio的完美迁移——项目迁移一
- Eclipse使用入门教程
- JSP的内置对象
- 软件质量保证与测试(练习)
- android 开发 system/app目录下面有多个重复包名的apk,会不会冲突
- JS上传图片预览效果
- 使用基于ThinkPHP3.2.3的ThinkAdmin创建手机电脑通用的表白墙(一)创建项目文件夹结构
- Java之关于标识符
- android控件的隐藏与显示
- HTTP协议以及版本
- vs2013 c++項目轉 vs2008
- Facebook 工程师是如何高效工作的?
- fragment跳转到fragment
- 卷积神经网络
- Android ViewGroup事件分发机制总结
- windows 下使环境变量生效
- DataBase -- Count & Group by
- vs2012搭建gtest环境
- 今天说一下DML触发器的顺序