/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* struct TreeNode *left;
* struct TreeNode *right;
* };
*/
struct TreeNode* _build(int* preorder, int* pindex, int* inorder, int inbegin,int inend)
{
struct TreeNode* root = (struct TreeNode*)malloc(sizeof(struct TreeNode));
root->val = preorder[*pindex];
int rootindex = inbegin;
for(;rootindex <= inend;rootindex++)//在中序中找到该结点的位置
{
if(inorder[rootindex] == root->val)
{
break;
}
}
if(inbegin < rootindex)//如果左边有结点则创建
{
++(*pindex);
root->left = _build(preorder,pindex,inorder,inbegin,rootindex-1);//左子树的范围是inbegin~rootindex-1
}
else
{
root->left = NULL;
}
if(rootindex < inend)如果右边有孩子则创建
{
++(*pindex);
root->right = _build(preorder,pindex,inorder,rootindex+1,inend);//左子树的范围是rootindex+1,inend
}
else
{
root->right = NULL;
}
return root;
}
struct TreeNode* buildTree(int* preorder, int preorderSize, int* inorder, int inorderSize)
{
if(preorderSize <= 0)
{
return NULL;
}
int n = 0;
return _build(preorder,&n,inorder,0,inorderSize-1);
}
从前序与中序遍历序列构造二叉树
最新推荐文章于 2022-10-27 20:28:32 发布