已知一棵二叉樹的每個節點的值都不同,給定這個二叉樹的先序和中序遍歷數組,不要重建整棵二叉樹,而知通過給定的數組直接生成正確的後序數組。
#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;
}
路漫漫其修遠兮…