lintcode-中序遍历和后序遍历树构造二叉树-72

/**
 * 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> &post,vector<int> &in,int ps,int pe,int is,int ie){
        int record=post[pe];
        TreeNode *root= new TreeNode(record);
        if(is==ie)
            return root;
        int i;
        for(i=is;i<=ie;++i)
            if(in[i]==record)
                break;
        if(is<=i-1)    //存在左子树
            root->left =buildTree(post,in,ps,ps+i-is-1,is,i-1);
        if(i+1<=ie)    //存在右子树
            root->right=buildTree(post,in,ps+i-is,pe-1,i+1,ie);
        return root;
    }
    TreeNode *buildTree(vector<int> &inorder, vector<int> &postorder) {
            if(inorder.empty()&&postorder.empty())
                return nullptr;
            if(inorder.size()!=postorder.size())
                return nullptr;
            return buildTree(postorder,inorder,0,postorder.size()-1,0,inorder.size()-1);
    }
};

你可能感兴趣的:(lintcode-中序遍历和后序遍历树构造二叉树-72)