兩個字串,其長度n均小於等於26。第一行為前序遍歷,第二行為中序遍歷。
二叉樹中的結點名稱以大寫字母表示:a,b,c....最多26個結點。
輸入樣例可能有多組,對於每組測試樣例,示例1輸出一行,為後序遍歷的字串。
abcbacfdxeag
xdefag
bcaxedgaf
這道題的結局思路(我覺得)採用了分治的策略。
已知二叉樹的前序序列和中序序列,求後序序列。對於一串前序序列,可知第乙個結點是根節點,那麼將該結點放置在後序序列的最後。
然後在中序序列裡尋找該根結點的位置k,那麼k之前的序列即為左孩子,k之後的即為右孩子,並且可以求得左右孩子的長度,也就知道了在前序序列裡左右孩子的位置。
對左右孩子依舊採取這種策略,直到後序序列被填滿,即可得到後序序列。
在求後序序列時是遞迴求解,其終結遞迴條件需要注意。一開始我以為是前序序列首位置等於前序序列末位置時即停止。後來發現不對,如果乙個序列沒有左孩子,那麼放置根節點後,其左孩子長度為0,新的前序序列首位置加1,末位置不變,導致首位置直接大於末位置。
所以終結遞迴條件應是,如果首位置大於末位置即停止。
**:
#include #include #include using namespace std;
string pre;
string in;
char post[26];
/** low_pre 表示前序序列首位置
* high_pre 表示前序序列末位置
* 其餘類似
*/void postsearch(int low_pre,int high_pre,int low_in, int high_in,int low_post,int high_post)
int main()
return 0;
}
構建二叉樹 遍歷二叉樹
陣列法構建二叉樹 public class main public static void main string args 用陣列的方式構建二叉樹 public static void createbintree 把linkedlist集合轉成二叉樹的形式 for int j 0 j 最後乙個父節...
二叉樹遍歷
二叉樹的遍歷非常重要,但對已一棵比較複雜的樹,要寫出它的先 中 後序遍歷,往往不是那麼簡單,也很容易犯錯。這裡介紹一種比較直觀且不容易犯錯的方法。對於圖1所示的二叉樹,要寫出它的先 中 後序遍歷,往往很容易出錯。圖 1 其實,我們可以用圖2中的紅線描畫出二叉樹的輪廓。圖 2 而對於樹上的每乙個節點,...
二叉樹遍歷
描述 華為實習生招聘,有一道類似如下的題目 給出二叉樹,如圖1所示 圖 1 二叉樹 要求給出中序遍歷的結果。下面分別就前序遍歷 中序遍歷 後序遍歷進行分析。規律 前序遍歷 根在前 子樹在根後且左子樹比右子樹靠前 中序遍歷 根在中 左子樹在根左邊,右子樹在根右邊 後序遍歷 根在後 子樹在根前且左子樹比...