1.理解二叉樹的型別定義與性質。
2.掌握二叉樹的二叉鍊錶儲存結構的表示和實現方法。
3.掌握二叉樹遍歷操作的演算法實現。
4.熟悉二叉樹遍歷操作的應用。
1.建立二叉樹的二叉鍊錶儲存結構。
2.實現二叉樹的先序、中序和後序三種遍歷操作(驗證性內容)。
3.應用二叉樹的遍歷操作來實現判斷兩棵二叉樹是否相等的操作(設計性內容)。
4.求從二叉樹根結點到指定結點p之間的路徑(應用性設計內容)。
硬體環境要求:
pc機(單機)
使用的軟體名稱、版本號以及模組:
windows環境下的vc++等。
前期要求掌握二叉樹的二叉鍊錶的儲存結構表示和三種遍歷操作演算法。
程式設計實現如下功能:
(1)假設二叉樹的結點值是字元,根據輸入的一棵二叉樹的完整先序遍歷序列建立一棵以二叉鍊錶表示的二叉樹。
(2)對二叉樹進行先序、中序和後序遍歷操作,並輸出遍歷序列,觀察輸出的序列是否與邏輯上的序列一致。
(3)主程式中要求設計乙個選單,允許使用者通過選單來多次選擇執行哪一種遍歷操作。
二叉樹的形式定義:二叉樹或為空樹,或是由乙個根結點加上兩棵分別稱為左子樹和右子樹的、互不交的二叉樹組成。
二叉樹的二叉鍊錶儲存結構描述為:
typedef
char telemtype;
typedef
struct bitnode
bitnode,
*bitree;
【核心演算法提示】二叉樹的遍歷是指按某條搜尋路徑周遊二叉樹,對樹中每個結點訪問一次且僅訪問一次。其中先序、中序和後序遍歷操作步驟分別為:
(1)先序遍歷:若二叉樹為空樹,則空操作;否則先訪問根結點,再先序遍歷左子樹,最後先序遍歷右子樹。
(2)先序遍歷:若二叉樹為空樹,則空操作;否則先中序遍歷左子樹,再訪問根結點,最後中序遍歷右子樹。
(3)先序遍歷:若二叉樹為空樹,則空操作;否則先後序遍歷左子樹,再後序遍歷右子樹,最後訪問根結點。
注意:這裡的「訪問」的含義可以很廣,幾乎可以含蓋對結點的任何一種操作。如:輸出結點的資訊、判斷結點是否為葉子結點等等。
由於二叉樹是一種遞迴定義,所以,要根據二叉樹的某種遍歷序列來實現建立一棵二叉樹的二叉鍊錶儲存結構,則可以模仿對二叉樹遍歷的方法來加以實現。如:如果輸入的是一棵二叉樹的完整先序遍歷序列,則可利用先序遍歷方法先生成根結點,再用遞迴函式呼叫來實現左子樹和右子樹的建立。所謂完整的先序遍歷序列就是在先序遍歷序列中加入空樹資訊。
【核心演算法描述】
void
createbitree
(bitree &t)
/*根據輸入的完整先序遍歷序列建立一棵二叉樹*/
}void
preorder
(bitree t)
/*先序遍歷二叉樹*/
}void
inorder
(bitree t)
/*中序遍歷二叉樹*/
}void
postorder
(bitree t)
/*後序遍歷二叉樹*/
}
//二叉樹的實現
#include
"stdio.h"
#include
"stdlib.h"
typedef
char telemtype;
typedef
struct bitnode
bitnode,
*bitree;
bitree creat
(bitree t)
}return t;
}void
preorder
(bitree t)
}void
inorder
(bitree t)
}//補充後序演算法
資料結構實驗報告 資料結構實驗報告
使用c語言中的陣列,實現線性表中的順序結構儲存的查詢 刪除操作。1 初始線性表通過陣列 迴圈 scanf語句實現輸入任意個整數。2 刪除操作的實現,任意輸入乙個要刪除的整數,找到這個元素,將此元素之後的所有元素逐個前移一位,實現刪除操作。3 要求以上2步操作可以重複執行。4 例如 刪除操作執行結果大...
資料結構實驗報告
1 掌握佇列儲存結構的表示和實現方法。2 掌握佇列的入隊和出隊等基本操作的演算法實現。3 了解佇列在解決實際問題中的簡單應用。1 建立順序迴圈佇列,並在順序迴圈佇列上實現入隊 出隊基本操作 驗證性內容 2 建立迴圈鏈佇列,並在迴圈鏈佇列上實現入隊 出隊基本操作 設計性內容 3 實現鍵盤輸入迴圈緩衝區...
資料結構實驗一 實驗報告
一 實驗目的 複習鞏固vc程式設計環境的使用,以及c 模板設計。1.回顧並掌握vc單檔案結構程式設計過程。2.回顧並掌握vc多檔案工程設計過程 3.掌握vc程式除錯過程。4.回顧c 模板和模板的程式設計。三 實驗內容 1.設計乙個單檔案結構程式完成從鍵盤輸入兩個數,輸出二者的 和 和 積 的結果。要...