LeetCode系列105—从前序与中序遍历序列构造二叉树

题意

105. 从前序与中序遍历序列构造二叉树

题解

方法一:递归

class Solution {
    
    
public:
    map<int, int> indexMap;

    TreeNode* buildTree(vector<int>& preorder, vector<int>& inorder) {
    
    
        for (int i = 0; i < inorder.size(); i++)
            indexMap[inorder[i]] = i;
        return buildTree(preorder, inorder, 0, preorder.size() - 1, 0, preorder.size() - 1);
    }

    TreeNode* buildTree(vector<int>& preorder, vector<int>& inorder, int preStart, int preEnd, int inStart, int inEnd) {
    
    
        if (preStart > preEnd) return nullptr;
        int midValue = preorder[preStart];
        int index = indexMap[midValue];
        TreeNode* node = new TreeNode(midValue);
        int leftTreeCount = index - inStart;
        node->left = buildTree(preorder, inorder, preStart + 1, preStart + leftTreeCount, inStart, index - 1);
        node->right = buildTree(preorder, inorder, preStart + leftTreeCount + 1, preEnd, index + 1, inEnd);
        return node;
    }
};

おすすめ

転載: blog.csdn.net/younothings/article/details/120159148