0
点赞
收藏
分享

微信扫一扫

lintcode: Construct Binary Tree from Preorder and Inorder Traversal

王小沫 2022-12-01 阅读 131


Given preorder and inorder traversal of a tree, construct the binary tree.

我以前的博文已有介绍​​构造二叉树​​

/**
* Definition of TreeNode:
* class TreeNode {
* public:
* int val;
* TreeNode *left, *right;
* TreeNode(int val) {
* this->val = val;
* this->left = this->right = NULL;
* }
* }
*/


class Solution {
/**
*@param preorder : A list of integers that preorder traversal of a tree
*@param inorder : A list of integers that inorder traversal of a tree
*@return : Root of a tree
*/
public:
TreeNode *helper(vector<int> &preorder, int pL,int pR,vector<int> &inorder,int iL,int iR){
TreeNode *node=new TreeNode(preorder[pL]);

vector<int>::iterator it=find(inorder.begin(),inorder.end(),preorder[pL]);
int mid=it-inorder.begin();

if(mid==iL){
node->left=NULL;
}else{
node->left=helper(preorder,pL+1,pL+(mid-iL),inorder,iL,mid-1);
}

if(mid==iR){
node->right=NULL;
}else{
node->right=helper(preorder,pL+(mid-iL)+1,pR,inorder,mid+1,iR);
}

return node;
}


TreeNode *buildTree(vector<int> &preorder, vector<int> &inorder) {
// write your code here
int len=preorder.size();
if(len==0){
return NULL;
}

return helper(preorder,0,len-1,inorder,0,len-1);
}
};


举报

相关推荐

0 条评论