数据结构和算法经典100题-第27题

来源:互联网 发布:php地区三级联动 编辑:程序博客网 时间:2024/04/30 10:10

已知一棵二叉树的每个节点的值都不同,给定这个二叉树的先序和中序遍历数组,不要重建整棵二叉树,而知通过给定的数组直接生成正确的后序数组。


#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;}

路漫漫其修远兮…

0 0