leetcode || 105、Construct Binary Tree from Preorder and Inorder Traversal
来源:互联网 发布:网络上网行为监控 编辑:程序博客网 时间:2024/05/17 11:57
problem:
Given preorder and inorder traversal of a tree, construct the binary tree.
Note:
You may assume that duplicates do not exist in the tree.
题意:利用二叉树的前序遍历序列和中序遍历序列 构造二叉树,很经典的一道题
thinking:
(1)前序遍历的顺序是:父节点-> 左孩子->右孩子, 中序遍历的顺序是:左孩子->父 节点->右孩子
(2)前序遍历序列的第一个元素是父节点,在中序遍历序列中可以找到该节点的位置,利用位置之差计算出左子树的节点数,也知道右子树节点的数量了。在前序遍历序列中去掉父节点之后,第一个元素就是父节点的左孩子,前序遍历序列的右子树的第一个结点就是父节点的右孩子
(3)按照上述思路递归,可以构造出二叉树
(4)由于make()函数的形参类型是vector<int>::iterator ,太长了,这里使用模板函数,起到简化作用。
code:
class Solution {public: TreeNode *buildTree(vector<int> &preorder, vector<int> &inorder) { if(preorder.size()==0 || inorder.size()==0) return NULL; if(preorder.size()!=inorder.size()) return NULL; return make(preorder.begin(),preorder.end(),inorder.begin(),inorder.end()); }private: template<class it> TreeNode *make(it pFirst,it pLast,it qFirst,it qLast) { if(pFirst==pLast) return NULL; if(qFirst==qLast) return NULL; int a=*pFirst; TreeNode *node= new TreeNode(a); it loc=find(qFirst,qLast,a); int left_size = loc-qFirst; node->left=make(pFirst+1,pFirst+left_size+1,qFirst,loc); node->right=make(pFirst+left_size+1,pLast,loc+1,qLast); return node; }};
0 0
- LeetCode(105)Construct Binary Tree from Preorder and Inorder Traversal
- LeetCode 105 Construct Binary Tree from Preorder and Inorder Traversal
- LeetCode: Construct Binary Tree from Preorder and Inorder Traversal [105]
- LeetCode 105 Construct Binary Tree from Preorder and Inorder Traversal
- [leetcode 105] Construct Binary Tree from Preorder and Inorder Traversal
- [LeetCode 105]Construct Binary Tree from Preorder and Inorder Traversal
- leetcode || 105、Construct Binary Tree from Preorder and Inorder Traversal
- LeetCode 105:Construct Binary Tree from Preorder and Inorder Traversal
- Construct Binary Tree from Preorder and Inorder Traversal LeetCode 105
- Leetcode[105]-Construct Binary Tree from Preorder and Inorder Traversal
- LeetCode---(105)Construct Binary Tree from Preorder and Inorder Traversal
- Leetcode 105 Construct Binary Tree from Preorder and Inorder Traversal
- LeetCode(105) Construct Binary Tree from Preorder and Inorder Traversal
- Leetcode #105 Construct Binary Tree from Preorder and Inorder Traversal
- leetcode 105: Construct Binary Tree from Preorder and Inorder Traversal
- LeetCode 105: Construct Binary Tree from Preorder and Inorder Traversal
- 【LEETCODE】105-Construct Binary Tree from Preorder and Inorder Traversal
- LeetCode 105 Construct Binary Tree from Preorder and Inorder Traversal
- 装饰模式跟代理模式的区别
- Chrome的Console报错真是渣渣
- sql 创建表
- assert()函数用法总结
- 小波变换教程(二十二)
- leetcode || 105、Construct Binary Tree from Preorder and Inorder Traversal
- 每天学一点AndroidUI——下拉刷新
- 加减乘除求余混合运算
- 小波变换教程(二十三)
- 解题报告 之 POJ3281 Dining
- 机器学习(Machine Learning)概念整理(PCA、概念学习、ID3算法、决策树算法)
- 小波变换教程(二十四)(全文完)
- Happy Number
- linux socket