/*
二叉樹的遍歷:
先序遍歷(preorder tr**ersal):先遍歷父節點,然後是左孩子,右孩子。
中序遍歷(inorder tr**ersal):先遍歷左孩子,然後是父節點,最後遍歷右孩子。
後序遍歷(postorder tr**ersal):先遍歷左孩子和右孩子,然後遍歷父節點。
*/題目大意:給出乙個二叉樹的先序和中序遍歷序列,求後序遍歷序列;
思路:將一棵二叉樹分為根節點,左子樹,右子樹三部分。先讓根節點入棧,然後遞迴處理右子樹和左子樹(必須先右後左)。最後依次出棧即得到後序遍歷序列。
ps:本題解法是在假設所有節點數字不同的條件下進行的,題目並沒有給出這個條件,不過能過測試。
[cpp]
#include
#include
#include
#include
#include
using namespace std;
const int n=1005;
int preorder[n],inorder[n];
stackpostorder;
//二叉樹由先序序列和中序序列求後序序列
void getpost(int pstart,int pend,int istart,int iend)
j=pstart+(i-istart)+1; //j表示先序中左右子樹的分界點
if(j<=pend && i+1<=iend)
if(pstart+1<=j-1 && istart<=i-1)
} int main()
printf("\n");
} return 0;
}
hdu1710 二叉樹詳解
題意 給出前序遍歷序列和中序遍歷序列,求後序遍歷序列 首先要根據前序和中序把樹建立起來,再寫後序遍歷就好 思路很簡單結果還是被我寫跪了,看了好些博文,感覺,好吧不算是什麼小技巧,是我編碼太渣太渣。有兩個地方借鑑了,於是我居然很有興致的把自己的也詳細詳細的全註解上了,要是平時也有耐心這樣多好。就不會過...
hdu 1710恢復二叉樹
恢復二叉樹是面試的經典題目,首先我們知道的結論是已知前序和中序或者後序和中序,那麼我們就可以唯一的確定乙個二叉樹。思路是在 中序的某一段中 前序 後序 中靠前 後 的 節點是這一段中序的父親節點,並且由這個節點將這一段劃分為二。當不能劃分的時候就是到了葉子節點。所以我們可以考慮傳遞父親節點和他的部分...
HDU 1710 二叉樹水題
傳送門 hdu 1710 水遞迴,記得以前剛學資料結構的時候還用結構體模擬字串做 用字串是通過string的find函式,這裡讀取的時候可以直接記錄先序遍歷的元素在中序中的位置 輸出左右子樹,然後輸出根 include include include using namespace std cons...