使用結構陣列建立二叉樹,二叉樹的每乙個節點使用結構體來表示的,結構體中存放的是左右子節點的標號和此節點的值。
1.結構陣列:
t[0]是樹的乙個節點,這個節點的值放在t[0].data中,這個節點的左子節點的標號放在t[0].lift,右子節點的標號放在t[0].right中,訪問左子節點的值t[t[0].lift].data,這些節點中有乙個是根節點,不一定是t[0],找出根節點,就可以訪問整個樹了。
2.判斷根節點:
根節點是樹開始的節點,所以在其他節點中都不可能訪問到根節點,所以根節點的陣列標號,不可能出現在其他節點的左右節點中,所以只需要遍歷整個陣列,將訪問到的節點對應的標號記錄下來,再判斷哪乙個節點沒有被訪問過,就可以判斷這個節點是根節點。實現方法是建立乙個陣列,用零初始化,建立樹的時候,哪乙個下標的左或右節點被訪問過就把陣列對應下標的元素置1,最後遍歷陣列,找出為零的標號,就是根節點。
3.判斷是否同構:
同構要求整個樹的節點個數、子樹的節點個數和元素相同,可以交換左右子樹。通過分析所有左右子樹的情況,用遞迴判斷兩個樹是否同構。
step1.如果兩個樹的根節點都為空,兩個樹同構,返回1。
step2.如果兩個樹的根節點不相等,兩個樹不同構,返回0。
step3.如果兩個樹的根節點乙個為空乙個不為空,兩個樹不同構,返回0。
以上三種情況都不是,則說明兩個根節點存在且相等,接下來判斷根節點的左子節點。
step4.如果兩個樹根節點的左子節點都不存在,則判斷兩個樹根節點的右子節點是否同構,如果同構則返回1,如果不同構則返回0。
step5.如果兩個樹根節點的左子節點都存在且相等,則判斷兩個樹的左子樹是否同構,兩個樹的右子樹是否同構,都同構返回1。
step6.如果不是上面的情況,就是左子節點和右子節點有乙個不存在,或者左子節點和右子節點不相等,則判斷樹1的左子樹和樹2的右子樹是否同構,樹1的右子樹和樹2的左子樹是否同構,都同構返回1。
建立二叉樹 後序建立二叉樹
由後序遍歷可知,輸入順序是左結點 右結點 子樹根結點 比如輸入如下樹 ab cde 輸入序列為 e d b c a 思路 使用棧,對左結點和右結點進行壓棧 1.當輸入遇到非 且棧中元素大於等於2,則可以確定乙個小三角樹形,並將這個樹根作為下乙個小三角樹形的乙個子節點 2.當輸入遇到非 但棧中元素小於...
建立二叉樹
今天看到了乙個資料結構的筆試題目,他要求寫出建立二叉樹的程式。我想練習練習,所以想了一下其大致的思路,記錄如下 題目的要求很簡單,給出乙個字串序列 比如說a b d,e h j,k l,m n c f,g i 然後要求按照其規則建立二叉樹,題目不難但是卻花費了我不少的時間 第一步,我想到的是需要什麼...
建立二叉樹
二叉樹在結構上不依賴組織鍊錶 指路法通過根節點與目標節點的相對位置進行定位 define bt left 0 define bt right 1 typedef unsigned long long btpos 結點指標域定義 typedef struct tag btressnode btress...