資料結構實驗報告
實驗名稱:實驗四 二叉樹的建立和遍歷
學號:***
姓名:gnosed
實驗日期:2017.11.5
一、實驗目的
1、掌握樹的先根構造
2、了解樹的遍歷
二、實驗具體內容
1、實驗題目1:
(1)題目
構造一棵二叉樹,並進行遍歷
要求:1、二叉樹的構造,可以輸入樹的先根序遍歷序列,然後進行構造
2、先使用遞迴的中根,先根,後根序對二叉樹做遍歷,然後對二叉樹進行中根序非遞迴遍歷
1、 在構造二叉樹的時候,輸入樹的先根序的時候,樹的先根序必須是完整的
2、 在進行二叉樹的中根序非遞迴遍歷**書寫時,使用的棧,可以使用stl的棧。
(2)分析
二叉樹是遞迴定義的,其建立和遍歷都可以通過遞迴來實現。
對於給定一種遍歷序列,不能唯一確定一顆二叉樹,而需要給定中序序列和另外一種遍歷序列。而對於一般二叉樹,如果對於所有缺少左孩子或者右孩子的結點,將其擴充完整,使得所有葉子結點都是外來的,那麼其遍歷序列是唯一的。所以,如果給定上述一種完整的遍歷序列(外來節點用#代替),就能確定唯一的一顆二叉樹。
現如給定先序序列: abd###ce#g##fh#i##j(最右結點j可不用新增#)
其對應的二叉樹:
a/ \
b c
/ \ / \
d # e f
/ \ / \ / \
# # # g h j
/ \ / \
# ## i
/ \
# #
利用給定序列建立一顆二叉樹,然後對其進行前序、中序和後序遍歷,輸出遍歷序列,根據上圖驗證二叉樹。
(3)實驗**
源**:
標頭檔案 bintree.h
#ifndef bintree_h_included
#define bintree_h_included
#define elementtype char
typedef struct node* pnode;
typedef struct node* pbintree;
struct node;
pbintree create(char seq,int &i,int k);
void pre_order(pbintree t);
void in_order(pbintree t);
void aft_order(pbintree t);
void destroy(pbintree t);
#endif // bintree_h_included
方法檔案 bintree.cpp
#include "bintree.h"
#include #include #include pbintree create(char seq,int &i,int k)
return null;
}void pre_order(pbintree t)
void in_order(pbintree t)
p=s.top();s.pop();
std::coutp=p->rchild;
}}void aft_order(pbintree t)
void destroy(pbintree t)
}
main函式
#include "bintree.h"
#include #include #include #define maxn 100
using namespace std;
int main()
{ int k=0;
char seq[maxn];
printf("pre_order of tree:\n");
scanf("%s",seq);
pbintree tree=create(seq,k,strlen(seq)-1);
cout<
測試結果:
pre_order of tree:
abd###ce#g##fh#i##j
pre_order:abdcegfhij
in_order:dbaegchifj
aft_order:dbgeihjfca
通過分析驗證,正確。
三、實驗小結
1. 在遞迴建立二叉樹時,一直不知為何用seq[i]==』\0』 結束不了建立過程,導致建立了亂碼結點,於是乾脆改變判斷方式,新增序列的乙個長度形參,用其結束建立。可是為什麼?主函式裡的scanf輸入序列,末尾已經帶有 \0了,為何作為實參傳入到方法檔案裡建立二叉樹就識別不出來?thinking……
2. 分析方案時,未明確要求,即每個葉子結點和孩子空缺處都要新增#,導致一度建立偏差。
3. 關於二叉樹的遞迴遍歷、非遞迴遍歷,筆者另有總結 。
資料結構實驗之二叉樹的建立與遍歷
time limit 1000ms memory limit 65536k 有疑問?點這裡 已知乙個按先序序列輸入的字串行,如abc,de,g,f,其中逗號表示空節點 請建立二叉樹並按中序和後序方式遍歷二叉樹,最後求出葉子節點個數和二叉樹深度。輸入乙個長度小於50個字元的字串。輸出共有4行 第1行輸...
資料結構實驗之二叉樹的建立與遍歷
已知乙個按先序序列輸入的字串行,如abc,de,g,f,其中逗號表示空節點 請建立二叉樹並按中序和後序方式遍歷二叉樹,最後求出葉子節點個數和二叉樹深度。輸入乙個長度小於50個字元的字串。輸出共有4行 第1行輸出中序遍歷序列 第2行輸出後序遍歷序列 第3行輸出葉子節點個數 第4行輸出二叉樹深度。abc...
資料結構實驗之二叉樹的建立與遍歷
time limit 1000ms memory limit 65536k 已知乙個按先序序列輸入的字串行,如abc,de,g,f,其中逗號表示空節點 請建立二叉樹並按中序和後序方式遍歷二叉樹,最後求出葉子節點個數和二叉樹深度。輸入乙個長度小於50個字元的字串。輸出共有4行 第1行輸出中序遍歷序列 ...