Construct Binary Tree from Inorder and Postorder Traversal

来源:互联网 发布:剪裁音乐软件 编辑:程序博客网 时间:2024/06/03 08:50
/**/** * 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 *createTree(vector<int> &inorder, int inBeg, int inEnd, vector<int> &postorder, int postBeg, int postEnd)    {        if (inBeg > inEnd)            return NULL;                    int root = postorder[postEnd];                int index;                for(int i = inBeg; i <= inEnd; i++)            if (inorder[i] == root)            {                index = i;                break;            }                    int len = index - inBeg;        TreeNode *left = createTree(inorder, inBeg, index - 1, postorder, postBeg, postBeg + len - 1);        TreeNode *right = createTree(inorder, index + 1, inEnd, postorder, postBeg + len, postEnd - 1);                TreeNode *node = new TreeNode(root);        node->left = left;        node->right = right;                return node;    }        TreeNode *buildTree(vector<int> &inorder, vector<int> &postorder) {        // Start typing your C/C++ solution below        // DO NOT write int main() function        if (inorder.size() == 0)            return NULL;                    TreeNode *head = createTree        (inorder, 0, inorder.size() - 1, postorder, 0, postorder.size() - 1);                return head;    }};

0 0
原创粉丝点击