剑指 Offer 07. 重建二叉树
题目要求:
已知二叉树的前序和中序遍历序列,输出该二叉树。

/** * 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 { private: unordered_map<int, int> index; public: TreeNode* MyTree(vector<int>& preorder, vector<int>& inorder,int pre_left, int pre_right, int in_left, int in_right) { if(pre_left > pre_right) return nullptr; int pre_root = pre_left; int in_root = index[preorder[pre_root]]; TreeNode* root = new TreeNode(preorder[pre_root]); int sub_left = in_root - in_left; root->left = MyTree(preorder, inorder, pre_root + 1, pre_root + sub_left, in_left, in_root - 1); root->right = MyTree(preorder, inorder, pre_root + sub_left + 1,pre_right, in_root + 1, in_right); return root; } TreeNode* buildTree(vector<int>& preorder, vector<int>& inorder) { int n = preorder.size(); for(int i = 0; i < n; i++) index[inorder[i]] = i; return MyTree(preorder, inorder, 0, n - 1, 0, n - 1); } };

浙公网安备 33010602011771号