二叉樹的建立與遍歷 資料結構實驗報告

2021-08-10 10:33:08 字數 2781 閱讀 5608

資料結構實驗報告

實驗名稱:實驗四 二叉樹的建立和遍歷

學號:***

姓名: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行輸出中序遍歷序列 ...