
前序的第一个必然是这棵树的根,再根据这个根再中序中的位置得出左子树有多少节点,再获得左子树的前序和中序递归完成,右子树亦是如此。
/**
* 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) {
if(preorder.size()==0){
return NULL;
}
if(preorder.size()==1){
TreeNode* p=(TreeNode*)new TreeNode;
p->val=preorder[0];
p->left=NULL;
p->right=NULL;
return p;
}
int i;
vector<int> a,b,c,d;
TreeNode* p=(TreeNode*)new TreeNode;
p->val=preorder[0];
for(i=0;i<inorder.size();i++){
if(inorder[i]==preorder[0]){
break;
}
b.push_back(inorder[i]);
a.push_back(preorder[i+1]);
}
p->left=buildTree(a,b);
for(i+=1;i<preorder.size();i++){
c.push_back(preorder[i]);
d.push_back(inorder[i]);
}
p->right=buildTree(c,d);
return p;
}
};
原文:https://www.cnblogs.com/hyffff/p/12936548.html