您的位置:首页 > 其它

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.

/**
* 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;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐