1. 程式人生 > >lintcode- 前序遍歷和中序遍歷樹構造二叉樹-73

lintcode- 前序遍歷和中序遍歷樹構造二叉樹-73

/**
 * Definition of TreeNode:
 * class TreeNode {
 * public:
 *     int val;
 *     TreeNode *left, *right;
 *     TreeNode(int val) {
 *         this->val = val;
 *         this->left = this->right = NULL;
 *     }
 * }
 */
 

class Solution {
public:
    TreeNode *buildTree(vector<int> &pre,vector<int> &in,int ps,int pe,int is,int ie){
        int record=pre[ps];
        TreeNode *root= new TreeNode(record);
        if(ps==pe)
            return root;
        int i;
        for(i=is;i<=ie;++i)
            if(in[i]==record)
                break;
        if(is<=i-1)    
            root->left =buildTree(pre,in,ps+1,ps+(i-is),is,i-1);
        if(i+1<=ie)    
            root->right=buildTree(pre,in,ps+(i-is)+1,pe,i+1,ie);
        return root;
    }
    TreeNode *buildTree(vector<int> &preorder, vector<int> &inorder) {
             if(inorder.empty()&&preorder.empty())
                return nullptr;
            
            if(inorder.size()!=preorder.size())
                return nullptr;
            return buildTree(preorder,inorder,0,preorder.size()-1,0,inorder.size()-1);
    }
};