Leetcode::Construct Binary Tree from Preorder and Inorder Traversal

 

递归实现

/**
 * 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 *build( vector<int>&preorder,vector<int> &inorder,int start,int end,int start1,int end1)
    {
        if(start==end)
        return NULL;
        
        int i;
        TreeNode * tmp = new TreeNode(preorder[start]);
        
        
        for(i=start1; i<end1; i++)
        {
            if( inorder[i]==preorder[start])
            break;
        }
        
        int len = i - start1;
        
        TreeNode *left=build(preorder,inorder,start+1,start+1+len,start1,i);
        TreeNode *right=build(preorder,inorder,start+1+len,end,i+1,end1);
        tmp->left=left;
        tmp->right=right;
        return tmp;
        
    }
    TreeNode *buildTree(vector<int> &preorder, vector<int> &inorder) {
        // Start typing your C/C++ solution below
        // DO NOT write int main() function
        return build(preorder,inorder,0,preorder.size(),0,inorder.size());
    }
};

  

posted @ 2013-06-30 22:04  NinaGood  阅读(174)  评论(0编辑  收藏  举报