1. 105

construct-binary-tree-from-preorder-and-inorder-traversal


2. 算法

http://www.cnblogs.com/grandyang/p/4296500.html

  • O(n)

3. 代码

struct TreeNode {
    int val;
    TreeNode *left;
    TreeNode *right;
    TreeNode(int x) : val(x), left(NULL), right(NULL) {}
};


class Solution {
private:
    TreeNode* dfs(vector<int>& preorder,vector<int>& inorder,int ps,int is,int len){
        if(len<=0)
            return NULL;
        TreeNode *root=new TreeNode(preorder[ps]);
        for(int i=0;i<len;i++)
            if(inorder[is+i]==root->val){
                root->left=dfs(preorder,inorder,ps+1,is,i);
                root->right=dfs(preorder,inorder,ps+i+1,is+i+1,len-i+1);
                break;
        }
        return root;
    }

public:
    TreeNode* buildTree(vector<int>& preorder, vector<int>& inorder) {
        return dfs(preorder,inorder,0,0,preorder.size());
    }
};

results matching ""

    No results matching ""