原題傳送門
給出一棵二叉樹的中序與後序排列。求出它的先序排列。(約定樹結點用不同的大寫字母表示)。
輸入格式:
2行,均為大寫字母組成的字串,表示一棵二叉樹的中序與後序排列。
輸出格式:
1行,表示一棵二叉樹的先序。
首先,一點基本常識,給你乙個後序遍歷,那麼最後乙個就是根(如abcd,則根為d)。
因為題目求先序,意味著要不斷找根。
中序acgdbhzkx,後序cdgahxkzb,首先可找到主根b;
那麼我們找到中序遍歷中的b,由這種遍歷的性質,可將中序遍歷分為acgd和hzkx兩棵子樹,
那麼對應可找到後序遍歷cdga和hxkz(從頭找即可)
從而問題就變成求1.中序遍歷acgd,後序遍歷cdga的樹 2.中序遍歷hzkx,後序遍歷hxkz的樹;
接著遞迴,按照原先方法,找到1.子根a,再分為兩棵子樹2.子根z,再分為兩棵子樹。
就按這樣一直做下去(先輸出根,再遞迴);
模板概括為step1:找到根並輸出
step2:將中序,後序各分為左右兩棵子樹;
step3:遞迴,重複step1,2;
#include#include#includeusing namespace std;
void beford(string in,string after)
求先序遍歷
如下 include struct treenode treenode binarytreefromorderings char inorder,char aftorder,int length treenode node new treenode 新建乙個樹節點 node elem aftorde...
求先序遍歷與後序遍歷
問題描述 給出一棵二叉樹的中序與後序排列。求出它的先序排列。約定樹結點用不同的大寫字母 表示,長度 8 輸入格式 兩行,每行乙個字串,分別表示中序和後序排列 輸出格式 乙個字串,表示所求先序排列 樣例輸入 badc bdca 樣例輸出 abcd 求後序遍歷與後序遍歷 include include ...
樹的先序遍歷
先序遍歷順序 根 左 右 對於任一結點p 1.訪問結點p,並將結點p入棧 2.判斷結點p的左孩子是否為空,若為空,則取棧頂結點並進行出棧操作,並將棧頂結點的右孩子置為當前的結點p,迴圈至1 若不為空,則將p的左孩子置為當前的結點p 3.直到p為null並且棧為空,則遍歷結束 所以 1 先將根節點入棧...