LeetCode: Construct Binary Tree from Preorder and Inorder Traversal
2014-09-30 13:01
393 查看
Given preorder and inorder traversal of a tree, construct the binary tree.
Note:
You may assume that duplicates do not exist in the tree.
Round 2:
class Solution {
public:
TreeNode *buildTree(vector<int> &preorder, vector<int> &inorder) {
int size = preorder.size()-1;
int start = 0;
return dfs(0, size, start, preorder, inorder);
}
private:
TreeNode *dfs(int si, int ei, int &sp, vector<int> &preorder, vector<int> &inorder)
{
if(si > ei)
return NULL;
TreeNode *node = new TreeNode(preorder[sp]);
int mid = 0;
for(mid = si; mid <= ei; mid++)
{
if(inorder[mid] == preorder[sp])
break;
}
sp++;
node->left = dfs(si, mid-1, sp, preorder, inorder);
node->right = dfs(mid+1, ei, sp, preorder, inorder);
return node;
}
};
Note:
You may assume that duplicates do not exist in the tree.
/** * Definition for binary tree * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */ class Solution { public: TreeNode *buildTree(vector<int> &preorder, vector<int> &inorder) { int size = preorder.size() - 1; int start = 0; return getTree(inorder, preorder, 0, size, start); } private: TreeNode* getTree(vector<int> &inorder, vector<int> &preorder, int start, int end, int &first) { if(start > end) return NULL; int i = 0; for(i = start; i <= end; i++) { if(inorder[i] == preorder[first]) { i++; break; } } i--; TreeNode* root = new TreeNode(preorder[first]); first++; root->left = getTree(inorder, preorder, start, i-1, first); root->right = getTree(inorder, preorder, i+1, end, first); return root; } };
Round 2:
class Solution {
public:
TreeNode *buildTree(vector<int> &preorder, vector<int> &inorder) {
int size = preorder.size()-1;
int start = 0;
return dfs(0, size, start, preorder, inorder);
}
private:
TreeNode *dfs(int si, int ei, int &sp, vector<int> &preorder, vector<int> &inorder)
{
if(si > ei)
return NULL;
TreeNode *node = new TreeNode(preorder[sp]);
int mid = 0;
for(mid = si; mid <= ei; mid++)
{
if(inorder[mid] == preorder[sp])
break;
}
sp++;
node->left = dfs(si, mid-1, sp, preorder, inorder);
node->right = dfs(mid+1, ei, sp, preorder, inorder);
return node;
}
};
相关文章推荐
- [leetcode刷题系列]Construct Binary Tree from Preorder and Inorder Traversal
- functionclass[LeetCode]Construct Binary Tree from Preorder and Inorder Traversal
- LeetCode - Construct Binary Tree from Preorder and Inorder Traversal
- Construct Binary Tree from Preorder and Inorder Traversal (中序和后序建树,在题目给的函数中完成)【leetcode】
- Leetcode: Construct Binary Tree from Preorder and Inorder Traversal
- [LeetCode]Construct Binary Tree from Preorder and Inorder Traversal
- LeetCode: Construct Binary Tree from Preorder and Inorder Traversal
- [leetCode] Construct Binary Tree from Preorder and Inorder Traversal
- leetcode - Construct Binary Tree from Preorder and Inorder Traversal
- [LeetCode]Construct Binary Tree from Preorder and Inorder Traversal
- [Leetcode 78] 105 Construct Binary Tree from Preorder and Inorder Traversal
- LeetCode Construct Binary Tree from Preorder and Inorder Traversal
- [LeetCode] Construct Binary Tree from Preorder and Inorder Traversal, Solution
- LeetCode_Construct Binary Tree from Preorder and Inorder Traversal
- [Leetcode] Construct Binary Tree from Preorder and Inorder Traversal
- [leetcode]Construct Binary Tree from Preorder and Inorder Traversal
- leetcode之Construct Binary Tree from Preorder and Inorder Traversal
- leetcode 109: Construct Binary Tree from Preorder and Inorder Traversal
- [面试真题] LeetCode:Construct Binary Tree from Preorder and Inorder Traversal
- [LeetCode] Construct Binary Tree from Preorder and Inorder Traversal