LeetCode: Construct Binary Tree from Preorder and Inorder Traversal

来源:互联网 发布:python redis模块 编辑:程序博客网 时间:2024/04/29 22:54

Given preorder and inorder 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:    void build(vector<int> &preorder, vector<int> &inorder,    TreeNode* &root, int r, int nStart, int nEnd)    {        if (nStart >= nEnd) return;                int num = preorder[r];        root = new TreeNode(num);        int idx = nStart;        while(idx < nEnd && inorder[idx] != num)            ++idx;        if (idx < nEnd)            build(preorder, inorder, root->left, r+1, nStart, idx);        if (nEnd > idx + 1)            build(preorder, inorder, root->right, r+idx-nStart+1, idx+1, nEnd);    }        TreeNode *buildTree(vector<int> &preorder, vector<int> &inorder) {        // Start typing your C/C++ solution below        // DO NOT write int main() function        int nSize = preorder.size();        if (nSize == 0) return NULL;        TreeNode* root = NULL;        build(preorder, inorder, root, 0, 0, nSize);        return root;    }};