和前面的两种方式类似,根据后续遍历数组的最后一个元素可以在中序数组中找到根节点,然后左边的为左子树,右边的为右子树。递归可得二叉树。
void CreateTreeByMidAndPost(Node* node, char * mid, char * post, int size)
{
if(NULL ==node)
{
return;
}
if(1 == size )
{
node->value = post[size -1];
return;
}
node->value = post[size -1];
int subSize = 0;
while( post[size -1] != mid[subSize])
{
++subSize;
}
if(subSize > 0)
{
Node* child = new Node;
node->Left = child;
CreateTreeByPreAndMid(child, mid,post, subSize );
}
if(subSize < size)
{
Node* child = new Node;
node->Right = child;
CreateTreeByPreAndMid(child, mid+subSize + 1,post + subSize, size - subSize - 1);
}
}