根据前序遍历和中序遍历的特点,前序序列的第一个是树的根结点,然后再中序序列中找到根节点,左边为左子树,右边右子树,然后递归建立各个子树。
代码如下:
#include <iostream>
#include <algorithm>
using namespace std;
struct TNode{
int m_val;
TNode* m_left;
TNode* m_right;
};
TNode* ConstructTree(int *preorderStart, int *preorderEnd,
int *inorderStart, int *inorderEnd){
int rootVal = *preorderStart;
TNode* root = new TNode();
root->m_val = rootVal;
root->m_left = root->m_right = NULL;
//search for root in inorder
int* rootPos = NULL;
for (rootPos = inorderStart; rootPos <= inorderEnd; rootPos++) {
if (*rootPos == rootVal) {
break;
}
}
if (rootPos > inorderEnd) {
cout << "Wrong data" << endl;
}
if (preorderStart == preorderEnd) {
if (inorderStart &