[英]Generate the post-order traversal given the in-order and pre-order traversal
我看到代碼發布在這里: 給定有序和后序遍歷,如何輸出樹的前序遍歷?
但是,我在理解邏輯時遇到了麻煩,尤其是對於樹的正確部分的遞歸:
postorder(preorder, prestart+i-inostart+1, inorder, i+1, length-i+inostart-1);
任何幫助,將不勝感激。
假定二元表達式樹以及有序,前順序和后順序遍歷如何作用於它:
inorder
:左子樹,當前根,右子樹 preorder
:當前根,左子樹,右子樹 postorder
:左子樹,右子樹,當前根 現在是當前代碼,首先標識左和右子樹。 如我們所知,前置數組的第一個元素是我們的根,我們可以在有序數組中找到對應的根。 我們知道,根之前的所有元素都是左子樹的元素,根之后的所有元素都是右子樹的元素。
我們想產生后序遍歷,所以我們遞歸地繼續左子樹:
postorder(preorder, prestart+1, inorder, inostart, i-inostart);
然后是右子樹:
postorder(preorder, prestart+i-inostart+1, inorder, i+1, length-i+inostart-1);
然后輸出我們當前的根目錄:
cout<<preorder[prestart]<<" ";
遞歸地執行此操作將導致該樹的后序遍歷。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.