/**
* 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* ConstructBinaryTree(int *prestart,int *preend,int *vinstart,int *vinend){
int rootvalue = prestart[0];
TreeNode*root = new TreeNode(prestart[0]);//上面的(int(x))就是需要的参数;
root->val = rootvalue;
root->left = nullptr;
root->right = nullptr;
//当中序里面只有一个数字时;
if(prestart==preend){
if(vinstart==vinend&&*prestart==*vinstart){
return root;
}
}
//在中序里面找做根节点
int leftlen = 0;
int *tmp = vinstart;
while(tmp<=vinend&&*tmp!=rootvalue){
leftlen++;
tmp++;
}
int *leftpreend = prestart+leftlen;
if(leftlen>0){
root->left = ConstructBinaryTree(prestart+1,leftpreend,vinstart,tmp-1);
}
if(leftlen<preend-prestart){
root->right = ConstructBinaryTree(leftpreend+1,preend,tmp+1,vinend);
}
return root;
}
TreeNode* reConstructBinaryTree(vector<int> pre,vector<int> vin) {
int presize = pre.size(),vinsize=vin.size();
if(presize!=vinsize||presize==0||vinsize==0){
return nullptr;
}
int *prestart = &pre[0];
int *preend = &pre[presize-1];
int *vinstart = &vin[0];
int *vinend = &vin[vinsize-1];
return ConstructBinaryTree(prestart,preend,vinstart,vinend);
}
};
c++根据中序和前序构建二叉树
最新推荐文章于 2023-01-02 15:17:14 发布