您的位置:首页 > 其它

LeetCode – Refresh – Construct Binary Tree from Inorder and Preorder Traversal

2015-03-19 05:30 323 查看
Only different with preorder and postorder is that the root start from the beginning for preorder.

/**
* 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 *getTree(vector<int> &iv, vector<int> &pv, int ist, int ied, int pst, int ped) {
if (ist > ied) return NULL;
int current = -1, len = 0;
for (int i = ist; i <= ied; i++) {
if (pv[pst] == iv[i]) {
current = i;
break;
}
}
len = current - ist;
TreeNode *root = new TreeNode(pv[pst]);
root->left = getTree(iv, pv, ist, current-1, pst+1, pst+len);
root->right = getTree(iv, pv, current+1, ied, pst+len+1, ped);
}

TreeNode *buildTree(vector<int> &preorder, vector<int> &inorder) {
if (inorder.size() == 0 || inorder.size() != preorder.size()) return NULL;
return getTree(inorder, preorder, 0, inorder.size()-1, 0, preorder.size()-1);
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐