LeetCode: Construct Binary Tree from Inorder and Postorder Traversal

来源:互联网 发布:中国银行金融软件 编辑:程序博客网 时间:2024/05/18 17:42

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

Note:

You may assume that duplicates do not exist in the tree.

/** * Definition for binary tree * struct TreeNode { *     int val; *     TreeNode *left; *     TreeNode *right; *     TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */class Solution {public:    TreeNode *buildTree(vector<int> &inorder, vector<int> &postorder) {        int size = postorder.size() - 1;        return getTree(inorder, postorder, 0, size, size);    }private:    TreeNode* getTree(vector<int> &inorder, vector<int> &postorder, int start, int end, int &last)    {        if(start > end)            return NULL;        int i = 0;        for(i = start; i <= end; i++)        {            if(inorder[i] == postorder[last])            {                i++;                break;            }        }        i--;        TreeNode* root = new TreeNode(postorder[last]);                last--;        root->right = getTree(inorder, postorder, i+1, end, last);        root->left = getTree(inorder, postorder, start, i-1, last);        return root;            }};

Round 2:

class Solution {public:    TreeNode *buildTree(vector<int> &inorder, vector<int> &postorder) {        return dfs(0, inorder.size()-1, 0, postorder.size()-1, inorder, postorder);    }private:    TreeNode *dfs(int si, int ei, int sp, int ep, vector<int> &inorder, vector<int> &postorder)    {        if(si > ei || sp > ep)            return NULL;        TreeNode *node = new TreeNode(postorder[ep]);        int mid = 0;        for(int i = si; i <= ei; i++)        {            if(inorder[i] == postorder[ep])            {                mid = i;                break;            }        }        int leftcount = mid - si;        int rightcount = ei - mid;        TreeNode *left = dfs(si, mid-1, sp, sp+leftcount-1, inorder, postorder);        TreeNode *right = dfs(mid+1, ei, ep-rightcount, ep-1, inorder, postorder);        node->left = left;        node->right = right;        return node;    }};


0 0
原创粉丝点击