LeetCode-Construct Binary Tree from Preorder and Inorder Traversal-前序中序恢复二叉树-递归
https://oj.leetcode.com/problems/construct-binary-tree-from-preorder-and-inorder-traversal/
跟后序中序类似。
/**
* Definition for binary tree
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
int n,m;
vector<int> pr;
vector<int> in;
TreeNode *Solve(int l1,int r1,int l2,int r2){
if (l1==r1) return NULL;
int val=pr[l1];
TreeNode *cur=new TreeNode(val);
int p=find(in.begin()+l2,in.begin()+r2,val)-in.begin();
cur->left=Solve(l1+1,l1+1+p-l2,l2,p);
cur->right=Solve(l1+1+p-l2,r1,p+1,r2);
return cur;
}
TreeNode *buildTree(vector<int> &preorder, vector<int> &inorder) {
pr=preorder;
in=inorder;
n=pr.size();
return Solve(0,n,0,n);
}
};
浙公网安备 33010602011771号