从二叉树的前序遍历序列和中序遍历序列重构出二叉树
2016-04-11 11:59
459 查看
题目描述
输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。题目来源:牛客网
问题分析
其实根据前序和中序的特点就可以做了,前序的第一个元素必定是根节点,那么在中序的序列中查找这个根节点的位置,两侧分为两部分,递归下去即可。实现
/** * Definition for binary tree * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */ class Solution { public: struct TreeNode* reConstructBinaryTree(vector<int> pre, vector<int> in) { if (pre.empty()) return NULL; int mid = findPos(in, pre[0]); vector<int> left_p(pre.begin()+1, pre.begin()+mid+1), right_p(pre.begin()+mid+1, pre.end()); vector<int> left_i(in.begin(), in.begin()+mid), right_i(in.begin()+mid+1, in.end()); TreeNode* left = reConstructBinaryTree(left_p, left_i); TreeNode* right = reConstructBinaryTree(right_p, right_i); TreeNode* root = new TreeNode(pre[0]); root->left = left; root->right = right; return root; } size_t findPos(const vector<int>& v, int key) { for (size_t i = 0; i < v.size(); ++i) if (v[i] == key) return i; return -1; } };
相关文章推荐
- 详解MySQL数据库insert和update语句
- 通过一道笔试题浅谈javascript中的promise对象
- 1008. Elevator (20)
- MTT PRocess
- python-面向对象(三)——类的特殊成员
- iOS动态计算Label的宽高
- LLDB 崩溃调试
- SVGALib
- 中文和英文的比较
- Mysql非安装版的安装使用相关问题
- knockout.js
- 这些小工具让你的Android 开发更高效
- PHP实现的浏览器检查类
- 关于 Java 中 finally 语句块的深度辨析
- 有上下界的网络流
- OpenGL之坐标转换(好文-清晰版)
- 测试驱动开发(TDD)在海外组的实践总结
- OpenCV中cvADDS()为啥第二个参数要是CvScalar类型?mask=NULL又是何意?
- LeetCode 14. Longest Common Prefix
- 【day0411 C++】字符串流istringstream和ostringstream的用法