前序遍历的第一个节点是根节点
对应在中序遍历中找的该节点,划分出左右子树区间
依次递归
#include<iostream>
using namespace std;
//利用前序遍历和中序遍历重建二叉树
struct Node
{
int _data;
Node* _left;
Node* _right;
Node(const int& x)
: _data(x)
, _left(NULL)
, _right(NULL)
{}
};
//前:根左右
//中:左根右
Node* _ReBulidTree(char*& pre, char* inStart, char* inEnd)
{
if (*pre == '\0')
return NULL;
Node* newRoot = new Node(*pre);
if (inStart == inEnd)
return newRoot;
char* tmp = inStart;
while (tmp != inEnd)
{
if (*tmp == *pre)
break;
tmp++;
}
newRoot->_left = _ReBulidTree(++pre, inStart, tmp - 1);
newRoot->_right = _ReBulidTree(++pre, tmp + 1, inEnd);
return newRoot;
}
Node* ReBulidTree(char* pre, char* in, size_t len)
{
if (pre == NULL || in == NULL || len <= 0)
{
return NULL;
}
return _ReBulidTree(pre, in, in + len);
}
int main()
{
char* pre = "123456";
char* in = "324165";
Node* root = ReBulidTree(pre, in, strlen(in));
return 0;
}