前序和中序構造樹的遞迴實現

來源:互聯網
上載者:User

標籤:style   io   ar   使用   sp   for   on   bs   ef   

雖然有時候遞迴的效率不高,但可以化繁為簡使做題的效率大大提高。是程式設計重要的一術要熟練掌握 。

就本題來說,最重要的的包括三個方面:

(1)如何設計遞迴體

(2)遞迴參數如何傳遞

(3)遞迴出口怎眼寫才能使程式簡化 


首先,遞迴體的形式決定了能否較為簡單的完成程式,如果細節考慮得過於繁瑣,則即使用了遞迴程式也會寫的很痛苦。因為你把本來該電腦自動完成的任務過多得交給了自己。所以,動筆之前,一定要做好頂層設計。本題設計了兩個unordered_map以迅速確定子樹的範圍,並將其設為全域以免參數傳遞的麻煩。


其次,傳什麼,怎麼傳?遞迴體設計好後穿什麼就確定了。比較大的實體可以引用的方式傳遞,如過程無修改再加上const。


最後,如果確定遞迴出口。一定要想到最簡的方式,避免過分地處理細節。

/** * Definition for binary tree * struct TreeNode { *     int val; *     TreeNode *left; *     TreeNode *right; *     TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */class Solution {public:    TreeNode *sub(vector<int> &preorder, int pre1,int pre2,vector<int> &inorder,int in1,int in2){        if(pre2<pre1) return nullptr; <span style="white-space:pre"></span>//very important to assure when the recursion ends        TreeNode *root = new TreeNode(preorder[pre1]);        //inorder ranges        int l1=in1, l2=in[preorder[pre1]]-1;        int r1=l2+2, r2=in2;        //preoder ranges        int ll=pre1+1, lr=pre1+1+(l2-l1); // l2-l1,length of left subtree        int rl=lr+1, rr=pre2;                root->left=sub(preorder,ll,lr,inorder,l1,l2);        root->right=sub(preorder,rl,rr,inorder,r1,r2);                return root;    }        TreeNode *buildTree(vector<int> &preorder, vector<int> &inorder) {        if(!preorder.size()||!inorder.size()) return nullptr;        if(preorder.size()!=inorder.size()) return nullptr;        //pre-processing        for(int i=0 ; i< preorder.size();++i)            pre[preorder[i]]=i;        for(int i=0 ; i< inorder.size();++i)            in[inorder[i]]=i;                int n=preorder.size()-1;                TreeNode *root=sub(preorder,0,n,inorder,0,n);                return root;    }    public:    unordered_map<int,int> pre,in;};



前序和中序構造樹的遞迴實現

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.