您的位置:首页 > 其它

Leetcode_105_Construct Binary Tree from Preorder and Inorder Traversal

2016-04-11 15:10 477 查看
这个题和上一个题差不多是一样的,只不过后序变成了前序,但是思路还是一样的,这次直接顺着上次的思路写的,一遍A了,算是记住这种算法了。

/**
* Definition for a binary tree node.
* 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) {
return getTree(preorder, 0, preorder.size() -1 , inorder, 0, inorder.size() - 1);
}

TreeNode* getTree(vector<int>& preorder, int begin1, int end1, vector<int>& inorder, int begin2, int end2)
{
if(begin1 > end1) return NULL;
TreeNode *head = new TreeNode(preorder[begin1]);
if(begin1 == end1) return head;
int i;
for(i = begin2;i<=end2;i++)
{
if(inorder[i] == preorder[begin1])
break;
}
int left_length = i - begin2;
head->left = getTree(preorder, begin1 + 1, begin1 + left_length, inorder, begin2, begin2 + left_length - 1);
head->right = getTree(preorder, begin1 + left_length + 1, end1, inorder, begin2 + left_length + 1, end2);

}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  leetcode