前序的第一个必然是这棵树的根,再根据这个根再中序中的位置得出左子树有多少节点,再获得左子树的前序和中序递归完成,右子树亦是如此。
/** * 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