剑指 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);
    }
};

 

 

posted on 2021-02-06 11:56  hannah_id  阅读(63)  评论(0)    收藏  举报

导航