105. Construct Binary Tree from Preorder and Inorder Traversal

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

/**
 * 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 {
public:
    TreeNode* createTree(vector<int>& preorder, int first1, int end1, vector<int>& inorder, int first2, int end2)
    {
       if(first1>end1) return NULL;
       if(first1==end1) return new TreeNode(preorder[first1]);
       int i;
       for(i = first2; i <=end2; i++)
       {
           if(preorder[first1]==inorder[i])
            break;
       }
        TreeNode* root = new TreeNode(preorder[first1]);
        root->left = createTree(preorder, first1+1, first1 + i - first2,inorder, first2, i -1);
        root->right = createTree(preorder,first1 + i - first2+1,end1,inorder,i+1, end2);
    
    return root;
    }
    TreeNode* buildTree(vector<int>& preorder, vector<int>& inorder) {
        if(preorder.size()==0 || inorder.size()==0) return NULL;
        if(preorder.size()!= inorder.size()) return NULL;
        int n = preorder.size();
        TreeNode* root = createTree(preorder, 0, n-1,inorder, 0,n-1);
        return root;
    }
};


你可能感兴趣的:(105. Construct Binary Tree from Preorder and Inorder Traversal)