[LeetCode] 106. Construct Binary Tree from Inorder and Postorder Traversal

来源:互联网 发布:欧洲杯决赛数据 编辑:程序博客网 时间:2024/06/05 11:36

Given inorder and postorder traversal of a tree, construct the binary tree.

class Solution {public:    TreeNode* buildTree(vector<int>& inorder, vector<int>& postorder) {        return buildTree(inorder.begin(), inorder.end(), postorder.begin(), postorder.end());    }private:    TreeNode* buildTree(vector<int>::iterator inbegin, vector<int>::iterator inend,                        vector<int>::iterator postbegin, vector<int>::iterator postend) {        if (postbegin >= postend) return nullptr;        postend--;        int rootval = *postend;        TreeNode *root = new TreeNode(rootval);        auto mid = find(inbegin, inend, rootval);        const int nleft = mid - inbegin;        root->left = buildTree(inbegin, mid, postbegin, postbegin + nleft);        root->right = buildTree(mid + 1, inend, postbegin + nleft, postend);        return root;    }};

这里写图片描述
这里写图片描述

// 使用hash优化了上面的find操作class Solution {public:    TreeNode* buildTree(vector<int>& inorder, vector<int>& postorder) {        unordered_map<int, vector<int>::iterator> loc;        for (auto it = inorder.begin(); it != inorder.end(); it++)            loc[*it] = it;        return buildTree(loc, inorder.begin(), inorder.end(), postorder.begin(), postorder.end());    }private:    TreeNode* buildTree(unordered_map<int, vector<int>::iterator> &loc,                        vector<int>::iterator inbegin, vector<int>::iterator inend,                        vector<int>::iterator postbegin, vector<int>::iterator postend) {        if (postbegin >= postend) return nullptr;        postend--;        int rootval = *postend;        TreeNode *root = new TreeNode(rootval);        auto mid = loc[rootval];        const int nleft = mid - inbegin;        root->left = buildTree(loc, inbegin, mid, postbegin, postbegin + nleft);        root->right = buildTree(loc, mid + 1, inend, postbegin + nleft, postend);        return root;    }};

这里写图片描述
这里写图片描述

阅读全文
0 0
原创粉丝点击