利用前序和中序重建二叉树;
递归的建立左右子树,注意结束递归的条件。
#include <vector>
#include <iostream>
using namespace std;
struct TreeNode
{
int val;
TreeNode *left;
TreeNode *right;
TreeNode(int _val) {
val = _val;
left = NULL;
right = NULL;
}
};
TreeNode* reBuildTree(int preOrder[], int preL, int preH, int inOrder[], int inL, int inH)
{
if(preL > preH || inL > inH)
return NULL;
int head = preOrder[preL];
TreeNode* p_tmp = new TreeNode(preOrder[preL]);
if(preL == preH)
return p_tmp;
int mid = inL;
while(inOrder[mid] != preOrder[preL])
mid++;
int tmp = mid - inL;
p_tmp->left = reBuildTree(preOrder,preL+1,preL+tmp,inOrder,inL,mid-1);
p_tmp->right = reBuildTree(preOrder,preL+tmp+1,preH,inOrder,mid+1,inH);
return p_tmp;
}
int main(int argc, char *argv[])
{
int preOrder[] = {4,2,1,3,5,7,6};
int inOrder[] = {1,2,3,4,5,6,7};
int preH = sizeof(preOrder)/sizeof(int);
int inH = sizeof(inOrder)/sizeof(int);
TreeNode* p_head = reBuildTree(preOrder,0,preH-1,inOrder,0,inH-1);
cout<<"For test\n";
return 0;
}