struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
class Solution {
public:
TreeNode* generate1(vector<int>& preorder, vector<int>& inorder, int preleft, int preright, int inleft, int inright)
{
if (preleft > preright || inleft > inright)
return nullptr;
vector<int>::iterator iter = find(inorder.begin(),inorder.end(),preorder[preleft]);
int index = iter - inorder.begin();
TreeNode* root = new TreeNode(preorder[preleft]);//根节点
root->left = generate1(preorder,inorder,preleft+1,preleft+index-inleft,inleft,index-1);
root->right = generate1(preorder, inorder,preright-inright+index+1 ,preright , index + 1, inright);
return root;
}
TreeNode *buildTree(vector<int> &preorder, vector<int> &inorder) {
int len = preorder.size();
TreeNode* root = generate1(preorder, inorder, 0, len - 1, 0, len - 1);
return root;
}
};
LeetCode二叉树的恢复和重建(前序和中序)
最新推荐文章于 2022-08-10 17:10:16 发布