我們已知層次序列陣列a,以及各結點對應的度。可以建立乙個臨時鍊錶組,先在組內存放乙個個單個的結點,再將各結點通過父子關係鏈結。
例如,我們有結點a
bcde
度220
00這樣的序列和度的情況【左圖】。要轉換為如下的孩子-兄弟鍊錶【右圖】。
先構造臨時樹temp【包括資料,左孩子,右兄弟指標】。在temp中各節點存放abcde資料,左右指標均為空。
獲取第乙個結點的度為2,則接下來的bc為其第乙個孩子和第二個孩子,將第乙個孩子b【k】賦給a【i】的左指標,之後的孩子依次賦值,如第二個孩子【k+1】給第乙個孩子【k】的右指標【c是b的右孩子】,第三個孩子【k+2】給第二個孩子【k+1】的右指標....
i:遍歷至第n個結點
k:指向接下來要處理的孩子。
接下來b的度為2,於是de為其孩子,第乙個孩子d【k】賦給b【i】的左指標,第二個孩子e【k+1】賦給第乙個孩子d【k】。
接下來的結點孩子數均為0,此時樹已經構造完畢。
void createtree(tree &t,datatype e,int degree,int n)
int k=0;
for(int i=0;ich=temp[++k]; //第乙個孩子賦給孩子指標
for(int j=2;i<=d;j++)}}
t=temp[0]; //樹的根節點指向臨時鏈的第乙個結點
}
樹的遍歷 已知中序 前序 後序)求層次遍歷
先來看一道題目 時間限制 400 ms 記憶體限制 65536 kb 長度限制 8000 b 判題程式 standard 作者 陳越 給定一棵二叉樹的後序遍歷和中序遍歷,請你輸出其層序遍歷的序列。這裡假設鍵值都是互不相等的正整數。輸入格式 輸入第一行給出乙個正整數n 30 是二叉樹中結點的個數。第二...
已知樹的中序序列和先序 後序序列,求樹的結構?
已知樹的中序序列和先序 後序序列,求樹的結構?這類問題比較經典了,剛好csdn上有人問起,所以自己寫了乙個遞迴演算法,根據中序和先序 後序 建立樹結構。這裡需要說明的是 必須要知道中序序列,先序和後序可選的情況下才能推導出樹結構,只知道後序先序是推導不出。簡單說明一下基本思路,例 已知後序 debg...
已知前序遍歷序列和中序遍歷序列,求二叉樹的後序遍歷
已知前序遍歷序列和中序遍歷序列,求二叉樹的後序遍歷思路 在前序遍歷的序列中第乙個就是樹的根結點,此時再在中序遍歷的序列裡查詢這個根結點,則中序遍歷的序列里根結點左側的就是左子樹,右側的就是右子樹,再對左右子樹進行同樣的操作,此時可以使用遞迴實現,這樣便能構造出這個二叉樹。class treenode...