题目描述
给定两个整数数组 preorder 和 inorder ,其中 preorder 是二叉树的先序遍历, inorder 是同一棵树的中序遍历,请构造二叉树并返回其根节点。
出处
思路
根据先序和中序可以划分左右子树,递归构造子树即可。
代码
class Solution {
public:TreeNode* buildSubTree(vector<int>& preorder, vector<int>& inorder, int p_start, int i_start, int i_end) {if(p_start>preorder.size()-1||i_start<0||i_start>i_end) return nullptr;TreeNode* root=new TreeNode(preorder[p_start]);if(i_start==i_end)return root;int i=i_start;while(inorder[i]!=preorder[p_start])i++;root->left = buildSubTree(preorder, inorder, p_start+1, i_start, i-1);root->right = buildSubTree(preorder, inorder,p_start+(i-i_start+1), i+1, i_end);return root;}TreeNode* buildTree(vector<int>& preorder, vector<int>& inorder) {return buildSubTree(preorder, inorder,0,0,inorder.size()-1);}
};