题目描述:
思路:
用递归的思想分别建立左右子树,先序遍历序列都是先遍历根节点,然后用一个for循环在中序遍历序列里面找到这个根节点然后在根节点左边的是左子树根节点右边的是右子树
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* struct TreeNode *left;
* struct TreeNode *right;
* };
*/
struct TreeNode* help(int* pre,int* in,int n)
{
if(pre==NULL||in==NULL||n==0)
return NULL;
else
{
struct TreeNode* s=(struct TreeNode*)malloc(sizeof(struct TreeNode));
s->val=*pre;
int i;
int* p;
for(p=in;p<in+n;++p)
{
if(*p==*pre)
break;
}
i=p-in;
s->left=help(pre+1,in,i);
s->right=help(pre+i+1,p+1,n-i-1);
return s;
}
}
struct TreeNode* buildTree(int* preorder, int preorderSize, int* inorder, int inorderSize){
int n=preorderSize;
struct TreeNode*root=help(preorder,inorder,n);
return root;
}
运行结果: