Учитывая код для вывода обхода дерева по порядку, когда у меня есть предварительный заказ и обход по порядку в целочисленном массиве.Как мне получить предварительный заказ с заданным массивом inorder и postorder?
void postorder( int preorder[], int prestart, int inorder[], int inostart, int length)
{
if(length==0) return; //terminating condition
int i;
for(i=inostart; i<inostart+length; i++)
if(preorder[prestart]==inorder[i])//break when found root in inorder array
break;
postorder(preorder, prestart+1, inorder, inostart, i-inostart);
postorder(preorder, prestart+i-inostart+1, inorder, i+1, length-i+inostart-1);
cout<<preorder[prestart]<<" ";
}
Вот прототип для preorder ()
void preorder (int inorderorder [], int inostart, intpostorder [], int poststart, int length)
для использования postorder () будет
int preorder[6]={6,4,1,5,8,9};
int inorder[6]={1,4,5,6,8,9};
postorder( preorder,0,inorder,0,6);
, на выходе будет
1 5 4 9 8 6
ниже указан неверныйкод для print_preorder (), все еще не работает ниже
void print_preorder( int inorder[], int inostart, int postorder[], int poststart, int length)
{
if(length==0) return; //terminating condition
int i;
for(i=inostart; i<inostart+length; i++)
if(postorder[poststart+length-1]==inorder[i])
break;
cout<<postorder[poststart+length-1]<<" ";
print_preorder(inorder, inostart , postorder, poststart, i-inostart);
print_preorder(inorder, inostart+i-poststart+1, postorder, i+1, length-i+inostart-1);
}