struct Treenode{
int val;
Treenode* left;
Treenode* right;
Treenode(int x) : val(x), left(NULL), right(NULL) {};
};
unordered_map<int,int> index;
Treenode* mybuild(const vector<int>& preorder, const vector<int>& inorder, int prel, int prer, int inl, int inr)
{
if(prel>prer){
return NULL;
}
int preorder_root=prel;
int inorder_root=index[preorder[preorder_root]];
Treenode* root=new Treenode(preorder[preorder_root]);
int size_l=inorder_root-inl;
root->left=mybuild(preorder, inorder, prel+1, prel+size_l, inl, inorder_root-1);
root->right=mybuild(preorder, inorder, prel+size_l+1, prer, inorder_root+1, inr);
return root;
}
Treenode* buildTree(vector<int>& preorder, vector<int>inorder){
int n=preorder.size();
for(int i=0;i<n;i++){
index[inorder[i]]=i;
}
return mybuild(preorder, inorder, 0, n-1, 0, n-1);
}
利用二叉树的前序遍历和中序遍历重建二叉树
最新推荐文章于 2024-10-10 22:04:37 发布