105. 从前序与中序遍历序列构造二叉树
105. 从前序与中序遍历序列构造二叉树
题目链接:105. 从前序与中序遍历序列构造二叉树
代码如下:
/*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode() : val(0), left(nullptr), right(nullptr) {}* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}* TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}* };*/
class Solution {
public:TreeNode* buildTree(vector<int>& preorder, vector<int>& inorder) {return tree(preorder,0,preorder.size()-1,inorder,0,inorder.size()-1);}TreeNode* tree(vector<int>& preorder,int prel,int prer, vector<int>& inorder,int inl,int inr){if(prel>prer)return nullptr;TreeNode *root=new TreeNode(preorder[prel],nullptr,nullptr);int index = inl;while (inorder[index] != root->val)index++;int llen = index - inl;root->left = tree( preorder, prel+1, prel + llen, inorder, inl, index - 1);root->right = tree(preorder, prel +llen + 1, prer, inorder, index + 1, inr);return root;}
};