力扣OJ 劍指 Offer 07. 重建二叉樹

輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。

 

例如,給出

前序遍歷 preorder = [3,9,20,15,7]
中序遍歷 inorder = [9,3,15,20,7]
返回如下的二叉樹:

    3
   / \
  9  20
    /  \
   15   7
 

限制:

0 <= 節點個數 <= 5000

 

class Solution {
public:
    TreeNode* buildTree(vector<int>& preorder,int s1, vector<int>& inorder, int s2, int len) {
        if(len<=0)return NULL;
        TreeNode *ans=new TreeNode;
        ans->val=preorder[s1];
        auto loc=find(inorder.begin()+s2,inorder.begin()+s2+len,preorder[s1]);
        ans->left=buildTree(preorder,s1+1,inorder,s2,loc-inorder.begin()-s2);
        ans->right=buildTree(preorder,loc-inorder.begin()-s2+s1+1,inorder,loc-inorder.begin()+1,len-(loc-inorder.begin()-s2)-1);
        return ans;
    }
    TreeNode* buildTree(vector<int>& preorder, vector<int>& inorder) {
        return buildTree(preorder,0,inorder,0,inorder.size());
    }
};

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章