Construct Binary Tree from Preorder and Inorder Traversal

/**
 * 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* build(vector<int>& preorder, vector<int>& inorder,int l1,int r1,int l2,int r2){
        if(l1>r1) return NULL;
       // if(l2>r2) return NULL;  可以注释掉的
        TreeNode* root;
        root = new TreeNode(preorder[l1]);

        int l=l2;
        while(inorder[l]!=preorder[l1]){
            l++;
        }
        l=l-l2;
        //int l=in_map[preorder[l1]]-l2;   可以使用map,提高查找速度
        root->left = build(preorder,inorder,l1+1,l1+l,l2,l2+l-1);        
        root->right =  build(preorder,inorder,l1+l+1,r1,l2+l+1,r2);  
        return root;
    }
    
    TreeNode* buildTree(vector<int>& preorder, vector<int>& inorder) { 
     TreeNode* root; 
     int s=preorder.size();
     if(s==0) return  root;
     root = build(preorder,inorder,0,s-1,0,s-1);
      return root;
    }
   
};

Construct Binary Tree from Preorder and Inorder Traversal

原文地址:https://www.cnblogs.com/julie-yang/p/4683605.html