题目描述:
根据一棵树的前序遍历与中序遍历构造二叉树。
注意:
你可以假设树中没有重复的元素。
例如,给出
前序遍历 preorder = [3,9,20,15,7]
中序遍历 inorder = [9,3,15,20,7]
返回如下的二叉树:
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/construct-binary-tree-from-preorder-and-inorder-traversal
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
题解:
class Solution {
public:
vector<int> pre;
vector<int> in;
int m;
int n;
TreeNode* buildTree(vector<int>& preorder, vector<int>& inorder)
{
m = preorder.size();
n = inorder.size();
if(m == 0 || n == 0)
return NULL;
pre = preorder;
in = inorder;
return help(0,m-1,0,n-1);
}
TreeNode *help(int pl,int pr,int ql,int qr)
{
if(pl > pr || ql > qr)
return NULL;
TreeNode *root = new TreeNode(pre[pl]);
int count = 0;
while(in[ql+count] != pre[pl])
++count;
root->left = help(pl+1,pl+count,ql,ql+count-1);
root->right = help(pl+count+1,pr,ql+count+1,qr);
return root;
}
};
解题思路:
前序遍历建树,每次通过头节点将数组分成左子树和右子树两部分,然后递归建树。