Leetcode 105. Construct Binary Tree from Preorder and Inorder Traversal
2017-02-03 10:25
537 查看
Given preorder and inorder traversal of a tree, construct the binary tree.
Note:
You may assume that duplicates do not exist in the tree.
s思路:
1. 理论上给定三种遍历的顺序就可以构造树本身,还是挺有趣的!
2. 给定inoder和preorder,我们每次从preorder取第一个数一定是root了,然后去inorder找到这个数,这样inorder中这个数左侧就是左子树,右侧就是右子树。即:利用preorder去找根节点,利用这个根节点去inorder找左右子树对应的sub vector,这样就可以recursive的构造树了。
3. 问题是,每次去inorder中找根节点,如果是从左往右,就很费事。可以用map来做
Note:
You may assume that duplicates do not exist in the tree.
s思路:
1. 理论上给定三种遍历的顺序就可以构造树本身,还是挺有趣的!
2. 给定inoder和preorder,我们每次从preorder取第一个数一定是root了,然后去inorder找到这个数,这样inorder中这个数左侧就是左子树,右侧就是右子树。即:利用preorder去找根节点,利用这个根节点去inorder找左右子树对应的sub vector,这样就可以recursive的构造树了。
3. 问题是,每次去inorder中找根节点,如果是从左往右,就很费事。可以用map来做
//方法1:recursive: 对每个subarray用left,right来限定其范围。所以,需要两组left/right分别对preorder和inorder来限定范围。 class Solution { public: TreeNode* helper(vector<int>& preorder, unordered_map<int,int>&mm,int preleft,int preright,int inleft,int inright){ // if(preleft>preright) return NULL; TreeNode* cur=new TreeNode(preorder[preleft]); int mid=mm[preorder[preleft]]; cur->left=helper(preorder,mm,preleft+1,preleft+mid-inleft,inleft,mid-1); cur->right=helper(preorder,mm,preleft+mid-inleft+1,preright,mid+1,inright); return cur; } TreeNode* buildTree(vector<int>& preorder, vector<int>& inorder) { // unordered_map<int,int> mm; for(int i=0;i<inorder.size();i++) mm[inorder[i]]=i; return helper(preorder,mm,0,inorder.size()-1,0,inorder.size()-1); } };
相关文章推荐
- [Leetcode]@python 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]problem 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 解题报告
- 105. Construct Binary Tree from Preorder and Inorder Traversal LeetCode
- 剑指offer 面试题6:重建二叉树(Leetcode105. Construct Binary Tree from Preorder and Inorder Traversal) 解题报告
- leetcode-java-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