力扣OJ 106. 從中序與後序遍歷序列構造二叉樹

根據一棵樹的中序遍歷與後序遍歷構造二叉樹。

注意:
你可以假設樹中沒有重複的元素。

例如,給出

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

    3
   / \
  9  20
    /  \
   15   7

 

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

 

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