數據結構和算法經典100題-第27題

已知一棵二叉樹的每個節點的值都不同,給定這個二叉樹的先序和中序遍歷數組,不要重建整棵二叉樹,而知通過給定的數組直接生成正確的後序數組。


#include <stdio.h>
#include <vector>
#include <stack>
#include <map>
using namespace std;

int setPos(int *preArray, int preBeg, int preEnd, int *inArray, int inBeg,
            int inEnd, int *posArray, int posLen,map<int, int> &inMap) {
    if (preBeg > preEnd) {
        return posLen;
    }

    int i = inMap[preArray[preBeg]];
    posArray[posLen--] = preArray[preBeg];

    posLen = setPos(preArray, preEnd-inEnd + i + 1, preEnd, inArray, i + 1, inEnd, posArray, posLen-1, inMap);
    return setPos(preArray, preBeg + 1, preBeg + i - inBeg, inArray, inBeg, i - 1, posArray, posLen, inMap);
}

bool getPosArray(int *pre, int *in, int len, int *pos) {
    if (!pre || !in) {
        return false;
    }

    map<int, int> inMap;
    for (int i = 0; i < len; ++i) {
        inMap[in[i]] = i;
    }

    setPos(pre, 0, len - 1, in, 0, len - 1, pos, len - 1, inMap);
    return true;
}

路漫漫其修遠兮…

發佈了56 篇原創文章 · 獲贊 13 · 訪問量 7萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章