1. 程式人生 > >前序中序建立二叉樹

前序中序建立二叉樹

vector版:直接上c++程式碼,講解在下面,一定要看哦!

struct node{
    node *l, *r;
    int val;
    node(int x) : val(x), l(NULL), r(NULL) {}
};
node* reBuild(vector<int> pre, vector<int> in){
    vector<int> lPre, rPre, lIn, rIn;
    int pos = 0;
    int len = in.size();
    if(len == 0)
        return NULL;
    node* cur = new
node(pre[0]); for(int i = 0; i < len; i++){ if(pre[0] == in[i]){ pos = i; break; } } for(int i = 1; i < pos+1; i++){ lPre.push_back(pre[i]); lIn.push_back(in[i-1]); } for(int i = pos+1; i < len; i++){ rPre.push_back(pre[i]); rIn.push_back(in[i]); } cur->l = reBuild(lPre, lIn); cur->r = reBuild(rPre, rIn); return
cur; }

一定不要死記硬背,跟隨我的思路來理解: 第一步,因為我們要建樹,所以函式的範圍值是一個節點指標。 第二步,因為模擬手動建樹,需要的引數就是前序遍歷和中序遍歷的序列,所以引數是pre,in。 第三步,根據分治法原理,遞迴地去建立當前節點的左子樹和右子樹,此處就是遞迴的入口(兩個)。 第四步,設定遞迴出口,當前序或者中序遍歷的長度為0時,返回。

共勉:做題先想思路,後想實現方法,不可一起考慮!