給定輸出樹的後序遍歷的代碼,當我有一個整數數組中的前序和inorder遍歷時。我如何同樣地獲得給定的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]<<" ";
}
這裏是原型序()
空隙序(INT inorderorder [],INT inostart,INT後序[],INT開始後,INT長度)
使用後序()這將是
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);
}
它是有道理的如何做後序,但搞清楚如何遞歸調用print_preoder真的讓我絆倒。 – user342580 2010-06-09 01:50:19
@ user342580:我在答覆中給了你更多提示......棘手的問題,但是如果不先理解紙上的算法,你可能就無法做到這一點。 – Stephen 2010-06-09 03:10:28
我改變了它,我得到了正確的第一個遞歸調用,但我改變到第二個是導致無限循環,我仍然不知道爲什麼。我想我只希望我能夠在這個額外的信用問題上得到部分信貸。謝謝,但你非常有幫助。 – user342580 2010-06-09 07:02:31