题目描述链接:https://leetcode-cn.com/problems/construct-binary-tree-from-preorder-and-inorder-traversal/
解题思路:递归法。前序遍历 根 左子树 右子树 中序遍历为 左子树 根 右子树
由此我们根据前序序列获得根,然后在中序序列中定位根的位置,便可得到根的左子树
与右子树序列之后对于左子树与右子树递归的进行此操作。最终实现解题。
LeetCode C++求解代码如下:
/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */ class Solution { public: unordered_map<int,int>index; TreeNode* buildTree(vector<int>& preorder, vector<int>& inorder) { for(int i=0;i<inorder.size();++i){ index[inorder[i]]=i; } return fun(preorder,inorder,0,preorder.size()-1,0,inorder.size()-1); } TreeNode* fun(vector<int>& preorder,vector<int>& inorder,int pre_left,int pre_right,int in_left,int in_right){ if(pre_left>pre_right){ return NULL; } int tree_root=preorder[pre_left];//树根 int temp=index[tree_root];//中序中树根位置 TreeNode *root=new TreeNode(tree_root); int size=temp-in_left; root->left=fun(preorder,inorder,pre_left+1,pre_left+size,in_left,temp-1); root->right=fun(preorder,inorder,pre_left+size+1,pre_right,temp+1,in_right); return root; } };