106. Construct Binary Tree from Inorder and Postorder Traversal

来源:互联网 发布:java工程师任职要求 编辑:程序博客网 时间:2024/06/07 08:23
/** * 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:    void build(TreeNode*&root,vector<int>&inorder,int il,int ir,vector<int>&postorder,int pl,int pr)    {        if(ir>=il&&pr>=pl)        {            int val=postorder[pr];            int i;            root=new TreeNode(val);            for(i=il;i<=ir;i++)            {                if(inorder[i]==val)                    break;            }            int lchildlength=i-il;            int rchildlength=ir-i;            build(root->left,inorder,il,i-1,postorder,pl,pl+lchildlength-1);            build(root->right,inorder,i+1,ir,postorder,pl+lchildlength,pr-1);        }    }public:    TreeNode* buildTree(vector<int>& inorder, vector<int>& postorder) {        int il=inorder.size();        int pl=postorder.size();        if(il==0)            return NULL;        TreeNode *root;        build(root,inorder,0,il-1,postorder,0,pl-1);        return root;    }};
0 0