美文网首页
105. Construct Binary Tree from

105. Construct Binary Tree from

作者: 刘小小gogo | 来源:发表于2018-08-19 00:05 被阅读0次
image.png
/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 * };
 */
class Solution {
public:
    TreeNode* buildTree(vector<int>& preorder, vector<int>& inorder) {
        if(!preorder.size() || !inorder.size()) return NULL;
        return builderHelper(preorder, 0, preorder.size(), inorder, 0, inorder.size());
    }
private:
    TreeNode* builderHelper(vector<int>& preorder, int pstart, int pend, vector<int> inorder, int istart, int iend){
        if(pstart >= pend || istart >= iend){
            return NULL;
        }
        int root = preorder[pstart];
        auto rootInorder = find(inorder.begin() + istart, inorder.begin() + iend, root);
        int length = rootInorder - (inorder.begin() + istart);
        TreeNode* myroot = new TreeNode(root);
        myroot->left = builderHelper(preorder, pstart + 1,pstart + 1 + length, inorder, istart, istart + length );
        myroot->right = builderHelper(preorder, pstart +1 + length,pend, inorder, istart+length+1,  iend );
        return myroot;
    }
};

一定要注意,是半开半闭区间,右边界是开的
只要写出来建左树,右边的对照着左边的坐标,即可写出


image.png
/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 * };
 */
class Solution {
public:
    TreeNode* buildTree(vector<int>& inorder, vector<int>& postorder) {
        if(!inorder.size() || !postorder.size()){
            return NULL;
        }
        return helper(inorder, 0, inorder.size(), postorder, 0, postorder.size());
    }
    TreeNode* helper(vector<int>&inorder, int istart, int iend, vector<int>&postorder, int pstart, int pend){
        if(istart >= iend || pstart >= pend){
            return NULL;
        }
        int root = postorder[pend-1];
        auto rootInorder = find(inorder.begin() + istart, inorder.begin() + iend, root);
        int length = rootInorder - inorder.begin() - istart;
        TreeNode* myroot = new TreeNode(root);
        myroot->left = helper(inorder,istart, istart + length,postorder,pstart, pstart + length);
        myroot->right = helper(inorder, istart+length+1, iend, postorder, pstart + length, pend - 1);
        return myroot;
    }
};

相关文章

网友评论

      本文标题:105. Construct Binary Tree from

      本文链接:https://www.haomeiwen.com/subject/sgmqiftx.html