Tony's Log

Algorithms, Distributed System, Machine Learning

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

A collegiate textbook problem. Nothing special, but just take care of your memory use.

class Solution {
public:
    TreeNode *_buildTree(int pre[], int &inx_p, int np, int in[], int i0, int i1)
    {
        if(inx_p == np || i0 == i1) return NULL;

        TreeNode *pRoot = new TreeNode(pre[inx_p]);
        
        int inx = std::find(in + i0, in + i1, pre[inx_p++]) - in;
        
        TreeNode *pLeft = _buildTree(pre, inx_p, np, in, i0, inx);
        TreeNode *pRight = _buildTree(pre, inx_p, np, in, inx + 1, i1);
        pRoot->left = pLeft; pRoot->right = pRight;
        return pRoot;

    }
    TreeNode *buildTree(vector<int> &preorder, vector<int> &inorder) {
        int *pre = new int[preorder.size()];
        std::copy(preorder.begin(), preorder.end(), pre);
        int *in = new int[inorder.size()];
        std::copy(inorder.begin(), inorder.end(), in);
        int inx = 0;
        return _buildTree(pre, inx, preorder.size(), in, 0, inorder.size());
    }
};
posted on 2014-07-23 03:29  Tonix  阅读(124)  评论(0编辑  收藏  举报